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

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

С новой версией 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С» сообщила о запуске нового сервиса для бухгалтерских конфигураций – 1С:Региональные особенности налогообложения. Подключить эту функциональность можно уже сейчас и без дополнительной оплаты. Наличие действующего договора ИТС – обязательно.

сегодня в 14:45    138    ЕленаЧерепнева    0       

1

С 1 июля 2025 года Соцфонд России переводит сдачу ЕСФ-1 на ГИС ЕЦП вместо коммерческих систем ЭДО, а предоставление МЧД становится обязательным. Поэтому фирма «1С» напоминает о необходимости установить актуальные релизы для своих конфигураций.

01.07.2025    794    ЕленаЧерепнева    0       

4

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

01.07.2025    506    ЕленаЧерепнева    0       

1

В ближайшее время в экосистеме сервисов 1С появится совместный продукт фирмы «1С» и компании «Интерфакс» «1СКАУТ Антикоррупция» для автоматизации процедур по исполнению антикоррупционного законодательства.

27.06.2025    786    ЕленаЧерепнева    0       

4

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

25.06.2025    1323    ЕленаЧерепнева    0       

5

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

24.06.2025    905    ЕленаЧерепнева    0       

4

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

23.06.2025    783    ЕленаЧерепнева    0       

4

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

18.06.2025    673    ЕленаЧерепнева    1       

-1

Комментарии

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

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