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

27.09.2022      14296

С новой версией 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С:Специалист и 1С:Специалист-консультант по 1С:УТ 11.5 уже поступили в продажу. Фирма «1С» рекомендует использовать для подготовки к сертификации обновленные методички.

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

1

Новость ИТ и 1С

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

13.02.2025    335    ЕленаЧерепнева    0       

4

Новость Зазеркалье ИТ и 1С

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

11.02.2025    492    ЕленаЧерепнева    1       

2

Новость Единый налоговый платеж (ЕНП) ИТ и 1С ФНС

Федеральная налоговая служба России утвердила новую форму справки о сальдо единого налогового счета, которая вступит в силу 10 февраля 2025 года. В ней появилось 4 новых приложения, в числе которых расчет пеней и детализация отрицательного сальдо.

07.02.2025    479    eeldldl    0       

3

Новость ИТ и 1С Кадры Минтруд

Министерство труда России утвердило новую форму справки о среднем заработке, исчисленном работодателем. Приказ вступил в силу с 1 января 2025 года. Оформлять справки по-новому кадровые специалисты должны начать с 11 февраля 2025 года.

05.02.2025    460    Alisa_Brineva    0       

4

Новость ИТ и 1С

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

05.02.2025    576    ЕленаЧерепнева    0       

3

Новость 1С:ERP Управление предприятием 2 1С:Управление производственным предприятием ИТ и 1С

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

31.01.2025    1380    AnastasiaKl    1       

17

Новость Зазеркалье ИТ и 1С

Разработчики платформы пообещали реализовать для хранилища двоичных данных автоматическое распределение данных по серверам на основании частоты обращения к ним. Изменения позволят оптимизировать производительность систем на платформе 1С.

29.01.2025    4746    ЕленаЧерепнева    0       

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

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

То есть, вот эта ознакомительная версия, она хоть и с новым компилятором и соблюдает типизацию, но пока не так быстра за счет того, что по большей части все использует все те же "варианты". Указание типов требует изменений синтаксиса и потерю совместимости с 1С. Это будет в следующих версиях, но внедрять это надо постепенно.
6. tormozit 7260 27.09.22 17:54 Сейчас в теме
(5) Для начала можно предложить программистам в критичном к скорости коде использовать типизированные списки значений вместо массивов и по возможности указывать простые типы колонкам таблиц/деревьев значений. Определять все возможные типы результатов функции - это уже надо глубокой (можно ограничить для ускорения) статический анализ делать и можно опереться на документирующие комментарии или менее красивый Если Ложь Тогда. Таким образом уже можно будет заметно поднять количество фиксированных типов у переменных без потери совместимости с оригинальным языком. После потери совместимости с оригинальным языком много плюсов пропадет.
Evil Beaver; +1 Ответить
7. Evil Beaver 8264 27.09.22 18:29 Сейчас в теме
(6) Мало кто захочет так делать. Это же из области наслаждений извращениями. Тотальной потери с оригинальным языком не будет. Только в тех местах, где сам захочешь. Иными словами, написать типизированные списки вместо массивов будет можно и так и так.
8. Darklight 34 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
Оставьте свое сообщение