Встречаем релиз-кандидат OneScript 2.0 с JIT-компиляцией на борту

Встречаем релиз-кандидат OneScript 2.0 с JIT-компиляцией на борту
27.09.2022
14426

С новой версией OneScript скрипты могут исполняться со скоростью скомпилированного C#. Это повысит производительность часто вызываемых классов и интенсивных операций ввода-вывода.

Кроссплатформенность и статическая типизация кода 1С для нативного выполнения на C#

Опубликован релиз-кандидат OneScript v2.0.0-rc1 – новая версия кросс-платформенной виртуальной машины для выполнения скриптов на языке 1С:Предприятие.

В новом релизе глубоко переработана архитектура ядра, появились механизмы для строгой типизации и асинхронности, обеспечена основа под дальнейшее развитие языка.

Но самое главное новшество – это появление компилятора, который строит AST для языка 1С и транслирует его прямо в машинный код.

Реализация новой версии OneScript 2.0 полностью кроссплатформенная и не требует среды исполнения Mono (использует возможности .NET 5.0).

Трансляция кода 1С в машинный код «на лету»

Новый OneScript 2.0 имеет два режима компиляции и выполнения кода: классический (стековая машина) и native – компиляция в код машины .NET.

Кроме того, добавлен класс СкомпилированныйФрагмент, который позволяет превратить строку, которую раньше передавали в оператор «Выполнить», в высокопроизводительный метод.

Класс СкомпилированныйФрагмент

 

 

Поскольку статическая компиляция требует строгой типизации, для использования в таком фрагменте внешних переменных потребуется явно указать их типы – это можно сделать через свойство «Параметры».

При вызове для объекта этого класса метода Скомпилировать() возвращается Действие, выполнение которого вернет результат скомпилированного фрагмента на языке 1С с максимальной производительностью. Код, скомпилированный таким образом, выполняется на уровне производительности .NET, поскольку в конечном счете и является кодом .NET

Подробнее с тем, как работает класс «СкомпилированныйФрагмент» можно ознакомиться в видеоролике на канале «Веселый 1С».

Модули с нативной компиляцией

У файлов с директивой #native автоматически включается режим нативной компиляции – они будут скомпилированы целиком и выполнены новой средой исполнения по тем же правилам, что и СкомпилированныйФрагмент,

Этот код будет строго типизированным, а, поскольку типы переменных определяются компилятором автоматически, не все привычные конструкции языка 1С будут работать. Например, на данный момент в одну и ту же переменную нельзя записать значения разных типов.

Правила конверсии типов, а также языковые средства для явного указания типов планируются в будущих версиях.

То есть сейчас OneScript 2.0 все еще не полностью строго типизированный, но в язык планируется добавить конструкции указания типов у переменных, параметров методов и возвращаемых значений функций. Скорее всего, синтакс указания типов будет похож на тот, что используется в типизации языка 1С:Элемент.

Ограничения новой версии

Из-за особенностей движка .NET Core, на котором разработана архитектура новой версии, не поддерживается упаковка скрипта в единый exe-файл. Разработчики обещают реализовать эту функциональность позднее.

Также несовместимыми становятся внешние компоненты, созданные для предыдущей версии. Потребуется их перекомпиляция под net5

Новые универсальные дистрибутивы

Фреймворк поставляется в виде zip-архивов, которые не требуют установки. Их нужно распаковать в соответствующие директории (и при необходимости прописать в PATH) самостоятельно.

Предусмотрены дистрибутивы x86 для 32-битных сценариев и x64 – для всех остальных случаев.

Появилась универсальная поставка FDD (Framework Dependent Deployment), не зависящая от операционной системы. Исполняемые файлы FDD-поставки будут работать и на Linux и на Windows – для этого на целевой машине должен быть установлен фреймворк .NET 5-й версии.

Кроме этого, доступна самодостаточная поставка SCD (Self Contained Deployment), которая содержит фреймворк в себе и не требует наличия версии .NET на машине. SCD-поставка зависит от операционной системы, поэтому разбивается на версии для Windows и Linux.

Если вам удобнее смотреть новости в телеграме, то вот наша группа – ИНФОСТАРТ.

Автор:
Аналитик

См. также

С 1 июня 2025 года в России поэтапно вводится разрешительный режим продажи маркированных лекарств. Фармацевтические организации смогут отпускать препараты только после проверки их кода в системе Честный ЗНАК.

05.06.2025    320    user2146402    1       

1

Опубликовано обновление для линейки решений 1С:Бухгалтерия 3.0.176. Разработчики добавили много новых возможностей для работы с самозанятыми, улучшили интеграции с сервисами 1С, а также автоматизировали некоторые трудозатратные рутинные операции.

05.06.2025    598    ЕленаЧерепнева    0       

1

Оператор национальной системы маркировки Честный ЗНАК возмещает 50% расходов на оборудование производителям отдельных видов детских игрушек. Заявки для участия в программе поддержки принимаются до 1 сентября 2025 года.

02.06.2025    463    user2146402    0       

1

Разработчики платформы анонсировали, что в релизе 8.5.3 для кластера серверов будет доступно получение дополнительных показателей производительности через HTTP, защита от подбора паролей и завершение всех сеансов определенного пользователя.

28.05.2025    734    ЕленаЧерепнева    0       

1

В релизе 8.5.3 будут доступны пакетная обработка запросов, оптимизация работы веб-серверов с несколькими rphost и более быстрая работа клиента и конфигуратора на macOS.

20.05.2025    799    ЕленаЧерепнева    0       

2

Фирма «1С» обновила свои решения для автоматизации тестирования – «1С:Тестировщик», поставляемый бесплатно, и «1С:Сценарное тестирование», которое входит в состав 1С:КИП. Рассказываем о новых возможностях, доступных в продуктах от вендора.

15.05.2025    662    ЕленаЧерепнева    0       

2

Минфин планирует поэтапный ввод лицензирования оптовой, розничной и развозной торговли табачной и никотинсодержащей продукции. Этим займутся Росалкогольтабакконтроль и власти регионов. Первый этап лицензирования стартует с 1 марта 2026 года.

14.05.2025    433    Alisa_Brineva    0       

3

Официальный технологический блог фирмы «1С» сообщил о планах реализовать в платформе 8.5.3 новые возможности для работы с 1С:Аналитикой. Теперь отчеты, подготовленные в BI-системе, можно будет делать частью прикладной конфигурации.

13.05.2025    1099    ЕленаЧерепнева    0       

6

Комментарии

Инфостарт бот
1. Darklight 27.09.22 17:19 Сейчас в теме
Это очень круто! ОЧЕНЬ! Прямо настоящая революция - ну над некоторыми деталями, конечно, ещё надо будет поработать!
Любопытны, конечно, сравнительные тесты производительности....
2. Evil Beaver 27.09.22 17:26 Сейчас в теме
(1) в видеоролике по ссылке я как раз привожу сравнительные тесты производительности
3. Darklight 27.09.22 17:31 Сейчас в теме
(2)Спасибо, видеоролик то я и не заметил ;-)
4. tormozit 27.09.22 17:37 Сейчас в теме
5. Evil Beaver 27.09.22 17:42 Сейчас в теме
(4) тут есть нюанс. Обычный код он тоже так компилируется, однако все параметры методов, значения, полученные из универсальных коллекций, результаты функций - словом 90% всех переменных компилируются в строго-типизированный тип "Variant", который как-бы и не строго типизированный, универсальное значение.

Отсюда получается, что типизация строгая, но большая часть переменных - это варианты с динамической диспетчеризацией, которые работают уже не так быстро, а "как раньше".

То есть, вот эта ознакомительная версия, она хоть и с новым компилятором и соблюдает типизацию, но пока не так быстра за счет того, что по большей части все использует все те же "варианты". Указание типов требует изменений синтаксиса и потерю совместимости с 1С. Это будет в следующих версиях, но внедрять это надо постепенно.
6. tormozit 27.09.22 17:54 Сейчас в теме
(5) Для начала можно предложить программистам в критичном к скорости коде использовать типизированные списки значений вместо массивов и по возможности указывать простые типы колонкам таблиц/деревьев значений. Определять все возможные типы результатов функции - это уже надо глубокой (можно ограничить для ускорения) статический анализ делать и можно опереться на документирующие комментарии или менее красивый Если Ложь Тогда. Таким образом уже можно будет заметно поднять количество фиксированных типов у переменных без потери совместимости с оригинальным языком. После потери совместимости с оригинальным языком много плюсов пропадет.
Evil Beaver; +1 Ответить
7. Evil Beaver 27.09.22 18:29 Сейчас в теме
(6) Мало кто захочет так делать. Это же из области наслаждений извращениями. Тотальной потери с оригинальным языком не будет. Только в тех местах, где сам захочешь. Иными словами, написать типизированные списки вместо массивов будет можно и так и так.
8. Darklight 28.09.22 09:31 Сейчас в теме
(7)(6)Да просто ввести для имеющихся коллекций дженерики в 1Script - и уже будет хорошо - без указания обобщённых типов - будет по старому Variant (с полной совместимостью синтаксиса) - с указанием - будет какой указали тип. Но тогда как-минимум, нужны будут кортежи - как замена структурам - т.к. в коде 1С структуры частые гости коллекций - а доступ к свойствам структуры (тем более циклический) - это потенциальный тормоз. Ну и что-то надо подумать с ТаблицейЗначения, у которой колонки динамически создаваемые.

На мой взгляд 1Script пора развиваться дальше убого синтаксиса 1С Предприятие 8. Всегда можно стараться остаться в рамках обратной совместимости с классическим синтаксисом 1С. Для редких исключений ввести директивы - переключения совместимости (1С же не брезгует - внедрила свойство конфигурации "Режим совместимости" - и очень медленно вносит изменения в ЯП - правда, по не разрушающие обратную совместимость).
Ну и для особых случаев (когда кто-то захочет переносит код 1Script в 1С Предприятие 8) - можно сделать специальный синтакс-конвертер - который будет линейно конвертировать расширенный код 1Script в код 1С. Та же типизация (в т.ч. через дженерики) конвертируется легко - просто убираем её и все дела (ну можно ещё в комментариях по формату 1С прописать типы) . Кортежи тоже легко в Структуры преобразуются. Да даже ООП классы (если вдруг их ввести в 1Script) можно статически линеризировать в функции со Cтруктурой вместо this (с этим могу помочь - архитектурные наработки есть). И систему делегатов тоже можно в целом перенести. Да тут, конечно, итоговый код будет не красивый - но главное, чтобы работал - в таких вот особо извращённых сценариях переноса из 1Script в 1С Предприятие 8.

Ну а в рамках инфраструктуры 1Script можно вполне себе развиваться без особой оглядки на совместимость с 1С Предприятие 8

Оставьте свое сообщение