ЧП ПРОМКОД - Официальный сайт Телефоны ЧП ПРОМКОД: В Киеве: +38(044)38-38-773, В Херсоне: +38(0552)39-10-24

 Официальный сайт Частного предприятия «ПРОМКОД».

Поиск   
Главная :: О компании :: Контакты :: Обратная связь
  Навигатор:
Информация для клиентов
Доработки к Бухгалтерии для Украины ред. 1.2
Советы бухгалтеру
Язык программирования Перфолента.Net
  Все статьи

   >   >   >   > 



Почему язык программирования Перфолента работает намного быстрее, чем языки 1С и OneScript

Язык программирования Перфолента работает довольно быстро. Но почему, что в нем не так, по сравнению с языками 1С, OneScript и Python? В этой статье мы проведем небольшое тестирование и измерение скорости работы программ на указанных языках программирования.

Почему Перфолента работает намного быстрее, чем 1С и OneScript?

 

Язык Перфолента это компилируемый язык, а не интерпретатор, как 1С, OneScript и Python. Поэтому код написанный на Перфоленте транслируется не в байт-код, как в упомянутых интерпретируемых языках, а в специальный низкоуровневый язык CIL. При запуске программа на лету (сразу вся или фрагментами по мере необходимости) компилируется в машинный код конкретного процессора специальным JIT компилятором. А машинный код работает на много быстрее, чем любой интерпретируемый байт-код, т.к. отсутствуют накладные расходы на работу интерпретатора.


Сравниваем скорость языков программирования Перфолента, 1С, OneScript и Python.

Разница в скорости у разных интерпретаторов может быть весьма большой. Например, из указанных в первом абзаце интерпретаторов, самый медленный это 1С, а самый быстрый Python. OneScript находится примерно посередине между ними.

Проведем небольшое исследование.

Возьмем простую программу с циклами, условиями и переменными на языке Перфолента:

//***************************
Программа ТестСкорости 
    //---------------------------
    Процедура Старт
    
        Перем а тип Целое;
        Перем б тип Булево;
 
        Перем т тип Число = ТекущаяУниверсальнаяДатаВМиллисекундах();

        ВыводСтроки "начало..."

        а=5;
        б=Истина;
        Для Инд=1 По 1000000 Цикл
            Если б Тогда
                б=НЕ б;
            Иначе
                б=НЕ б;
            КонецЕсли;
               Если а>Инд Тогда
                   а=а-1;
               Иначе
                   а=а+5;
            КонецЕсли;       
            а2=5;
            б2=Истина;
            Для Инд2=1 По 300 Цикл
                Если б2 Тогда
                    б2=НЕ б2;
                Иначе
                    б2=НЕ б2;
                КонецЕсли;
                   Если а2>Инд2 Тогда
                       а2=а2-1;
                   Иначе
                       а2=а2+5;
                КонецЕсли;       
            КонецЦикла;
        КонецЦикла;
        
        п="Время: "+(ТекущаяУниверсальнаяДатаВМиллисекундах() - т)/1000
        ВыводСтроки п
        ВводСтроки п
        
    КонецПроцедуры
    
КонецПрограммы    

 

И сравним скорость ее работы с аналогичной программой на языке 1С (она же работает и на OneScript):

Перем а;
Перем б;

т = ТекущаяУниверсальнаяДатаВМиллисекундах();

Сообщить("начало...");

а=5;
б=Истина;
Для Инд=1 По 1000000 Цикл
    Если б Тогда
        б=НЕ б;
    Иначе
        б=НЕ б;
    КонецЕсли;
       Если а>Инд Тогда
           а=а-1;
       Иначе
           а=а+5;
    КонецЕсли;       
    а2=5;
    б2=Истина;
    Для Инд2=1 По 300 Цикл
        Если б2 Тогда
            б2=НЕ б2;
        Иначе
            б2=НЕ б2;
        КонецЕсли;
           Если а2>Инд2 Тогда
               а2=а2-1;
           Иначе
               а2=а2+5;
        КонецЕсли;  
    КонецЦикла;
КонецЦикла;
Сообщить("ок...");
Сообщить("Время, сек: "+(ТекущаяУниверсальнаяДатаВМиллисекундах() - т)/1000);

 

Тексты программы на языках Перфолента и 1С (OneScript) различаются очень мало. Главное различие в том, что в языке Перфолента явно или неявно указываются типы переменных.

Для сравнения возьмем аналогичную программу на языке Python:

import time

start_time = time.time()

а=5;

б=True;

for Инд in range(1, 1000000):

    if б:

        б=not б;

    else:

        б=not б;

    if а>Инд:

        а=а-1;

    else:

        а=а+5;

    а2=5;

    б2=True;

    for Инд2 in range(1, 300):

        if б2:

            б2=not б2;

        else:

            б2=not б2;

        if а2>Инд2:

            а2=а2-1;

        else:

            а2=а2+5;

print(a);

print("--- %s seconds ---" % (time.time() - start_time))

 

В целом выглядит похоже, хотя и не привычно для глаза программиста 1С.

Запустим все программы и сведем результаты в таблицу:

Язык

Время работы

Разница в сравнении с Перфолентой

Перфолента

0.6647 сек

-

342.2 сек

в 510 раз медленнее

OneScript

244.1 сек

в 360 раз медленнее

Python

59.27 сек

в 90 раз медленнее

 

Конечно, приведенный результат вовсе не означает, что любые алгоритмы, написанные на этих языках, будут работать с таким же соотношением скорости. Чем больше в алгоритме вызовов библиотечных функций, тем меньше будет разница в скорости между Перфолентой и интерпретируемыми языками. Библиотечные функции обычно написаны на быстрых языках, вроде Си или Си++, но даже в таких алгоритмах Перфолента показывает большее быстродействие в 6-10 раз, т.к. между вызовами библиотечных функций все еще остается интерпретируемый код. И чем больше этого интерпретируемого кода, тем больше в отрыв уходит Перфолента! В приведенных примерах программ, библиотечных вызовов нет, поэтому и разрыв в производительности такой большой.

В 510 раз, много это или мало? Представьте, что программа на Перфоленте считала сутки, тогда программа на 1С будет считать примерно полтора года, программа на OneScript справится за год, а Питону хватит трёх месяцев…

Но не все так плохо для интерпретируемых языков. В обычных программах большое быстродействие необходимо редко, т.к. алгоритмы, реагирующие на действия пользователя, не очень тяжелые. И все же, иногда производительности не хватает, и в этом случае Перфолента может быть хорошим выбором для решения задачи. Тем более, что вызвать библиотеку написанную на Перфоленте можно и из OneScript, и из 1С, и даже из Питона. Из OneScript это делается совершенно естественно, т.к. он написан на той же платформе Net, что и Перфолента. А для запуска из 1С и Питона нужны специальные приемы, которые, к счастью, подробно описаны на многих ресурсах в интернете, например, на Инфостарте.

 

 

 

 



  Новости ПРОМКОД:
      27.10.2019 Обновился до версии 0.4 дистрибутив языка программирования Перфолента.Net
      23.07.2019 Опубликована первая пробная версия языка программирования Перфолента
      03.07.2018 На портале поддержки пользователей опубликованы внешние формы отчетов "Декларация по НДС, Уточняющий расчет по НДС"
      27.06.2018 На сайте поддержки пользователей опубликована информация о проблемных ситуациях в типовых конфигурациях для Украины
      21.06.2018 Выпущены новые релизы типовых конфигураций для Украины на платформе 1С:Підприємство 7.7
       Все новости ПРОМКОД

  Развлечения:
Загрузка...
 



Официальный сайт ЧП ПРОМКОД
Copyright (c) ЧП ПРОМКОД, 2014-2020