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

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

С новой версией 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С:Предприятие 8.3.5 планируется добавить возможность просмотра файлов Microsoft Office и документов некоторых других форматов. Об этом сообщил официальный технологический блог «Заметки из Зазеркалья».

вчера в 12:52    419    ЕленаЧерепнева    0       

4

Фирма «1С» обновила методические материалы для подготовки к экзамену «1С:Специалист-консультант по регламентированному учету в 1С:ERP Управление предприятием 2.5». Рассказываем, что учесть при подготовке к сертификации.

10.03.2025    524    ЕленаЧерепнева    0       

2

В экосистеме 1С появился продукт, создающий код с использованием искусственного интеллекта. Это 1С:Напарник, с помощью которого можно переводить человеческий язык в код 1С, создавать подсказки, объяснять написанное кем-то или делать код-ревью.

04.03.2025    11551    ЕленаЧерепнева    23       

13

Фирма «1С» опубликовала обновленный план задач для 1С:Предприятие 8.5.3. Большая часть пунктов уже имеет статус «Выполнено», некоторые перенесены на следующую версию. Рассказываем, чего ждать от 8.5.3 и что учитывать в своих проектах.

28.02.2025    1472    ЕленаЧерепнева    0       

2

Опубликованы очередные релизы обновлений для 1С:Кассы и 1С:Мобильной кассы. В продуктах появились новые функциональные возможности, а также реализована поддержка требований офлайн-проверок маркировки, которые начинают действовать с 1 марта 2025 года.

25.02.2025    1171    ЕленаЧерепнева    0       

2

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

24.02.2025    4465    Alisa_Brineva    0       

14

Обновленные сборники задач для подготовки к экзаменам 1С:Специалист и 1С:Специалист-консультант по 1С:УТ 11.5 уже поступили в продажу. Фирма «1С» рекомендует использовать для подготовки к сертификации обновленные методички.

14.02.2025    1178    ЕленаЧерепнева    0       

2

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

13.02.2025    1211    ЕленаЧерепнева    1       

5

Комментарии

Инфостарт бот
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

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