Releases: EvilBeaver/OneScript
v1.8.1
Новое в версии 1.8.1
Улучшения
- В класс
Поток
добавлены свойстваТаймаутЧтения
,ТаймаутЗаписи
,ДоступенТаймаут
- Класс СистемнаяИнформация лучше распознает запуск на MacOS
- Добавлено свойство
ИмяЯдра
в класс СистемнаяИнформация - Существенно ускорена работа Вычислить/Выполнить для повторных вызовов неизмененного текста (добавлен LRU-кэш для компилируемых Вычислить/Выполнить)
- Оптимизировано время запуска фоновых заданий. Короткоживущие задания создаются более эффективно при частом вызове. Для длительных заданий добавлен флаг longRunning
- Небольшие микрооптимизации механики вызова методов
Исправление ошибок
- Улучшена локализация ошибок (некоторые ошибки не имели английского текста)
- Более корректное закрытие объекта ЗаписьJSON при записи в строку
- Доступ к внутренней коллекции потоков был неконкурентным, что приводило к ошибкам в нагруженных приложениях Oscript.Web
- Исправлены ошибки выполнения, когда с помощью запятых опускался обязательный аргумент метода
НекийМетод(,,)
v2.0.0-rc1
Релиз-кандидат №1 версии 2.0.0
Версия 2.0 представляет собой переход на современную версию .NET (бывший .Net Core) с глубоким рефакторингом ядра
Основные отличия от версии 1.х
- Имеет 2 режима компиляции и выполнения кода: классический (стековая машина) и native - компиляция в код машины .net
- Потенциально, режим native может быть строго типизированным и по производительности не отличаться от C#. На данный момент компиляция в строготипизированный код ограничена возможностями класса
СкомпилированныйФрагмент
- Имеется ряд несовместимых изменений (breaking-changes) по сравнению с версией 1.х. Они перечислены в отдельном разделе
- Не требует среды исполнения Mono и является кросс-платформенным изначально
- Изменен состав дистрибутивов, их расшифровка описана в отдельном разделе
- За счет рефакторинга компилятора, потенциально имеет возможность получения синтаксического сахара (в будущем), несовместимого с языком 1С, но дающего удобство написания кода
Нативная компиляция
Модуль, имеющий в начале директиву #native
будет скомпилирован новым компилятором и выполнен новой средой исполнения. Этот код - будет строго типизированным, поэтому, далеко не все привычные конструкции языка 1С будут работать. Например, не всегда можно записывать в одну и ту же переменную значения разных типов.
Синтаксические конструкции указания типов пока в язык не включены, поэтому типы выводятся по мере умственных возможностей компилятора. Иногда он не справляется, в этом случае нужно понять, простить, и зарегистрировать ошибку.
#native
Процедура МояПроцедура(Параметр1)
// Параметр1 - это "универсальный тип" в него можно записывать любое значение
А = 1; // Переменная А получает тип Число и в него уже нельзя присвоить строку
Параметр1 = А; // Ошибки нет, т.к. Параметр1 это универсальный тип
Б = "Значение А равняется " + А; // Переменная Б получает тип Строка и в нее уже нельзя присвоить что-то еще
Массив = Новый Массив;
Массив.Добавить(А); // Коллекции нетипизированы. Все что в них попадет, приводится к универсальному типу
Массив.Добавить(Б);
ЗначениеИзМассива = Массив[0]; // ЗначениеИзМассива - это универсальный тип
Массив[0] = 8; // Число 8 приводится к универсальному типу
// Переменная А это Число, универсальное значение из Массива попытается привестись к Числу
// во время выполнения кода (и выдаст ошибку, если этого нельзя сделать)
А = Массив[0];
КонецПроцедуры
Правила конверсии типов, а также языковые средства для явного указания типов планируются в будущих версиях
Зачем нужны типы и все эти сложности?
- Для высоконагруженных случаев (контроллеры веб-приложений), часто вызываемые классы, интенсивная работа с вводом-выводом
- Для экспериментов с типизацией старого-доброго bsl
- Потому что это зашибись!
Потеря совместимости
- Не поддерживается упаковка скрипта в единый exe файл (особенности netcore, возможно, что-то придумаем позже)
- Внешние компоненты от версии 1.x не будут работать без перекомпиляции/адаптации кода
- Не тестировалась работоспособность внешних компонент NativeAPI платформы 1С:Предприятие
- Не поставляется инсталлятор setup.exe (ставка на ovm)
Как выбрать дистрибутив
Дистрибутивы делятся по разрядности и типу поставки. С разрядностью все понятно, это x86 для 32битных сценариев, и x64 для всех прочих. Основным является 64-битный дистрибутив и применять следует именно его в большинстве случаев.
Тип поставки
- FDD (Framework Dependent Deployment) - Зависящая от фреймворка поставка. Требует наличия .net нужной версии (на данный момент 5-й) на целевой машине. Имеет маленький размер. Не зависит от операционной системы (один и тот же ZIP будет работать на Linux и Windows, при условии наличия на машине фреймворка .NET)
- SCD (Self Contained Deployment) - Самодостаточная поставка. Содержит фреймворк в себе, поэтому не требует наличия версии .net на машине, более того, если на машине стоит 50 различных версий .net, 1script будет использовать свою собственную, не порождая конфликта совместимости. Зависит от операционной системы, поэтому, разбивается на версию для windows и версию для linux.
Короче, Склихасофский
- Я хочу поставить и забыть: бери версию для конкретной ОС нужной разрядности
- Я хочу маленький размер дистрибутива и заморочусь отдельно с установкой .NET: бери версию fdd
- Я строю докер-образ, в базе которого возьму готовый образ от microsoft с готовым дотнетом: бери версию fdd
v1.8.0
Новое в версии 1.8.0
Большинство задач релиза сделаны Михаилом Рыбакиным (@Mr-Rm). Огромное спасибо!
Переход на .NET Framework 4.8
- Переход на новый фреймворк позволяет поддерживать длинные файловые пути (более 260 символов)
- На старых версиях windows с выключенными автообновлениями, скорее всего, потребуется обновить .NET Framework вручную
Улучшение совместимости
- Метод
ИнформацияОбОшибке
вне блокаИсключение
возвращает пустой объект. Ранее было Неопределено - Автоматическая подстановка заголовка User-Agent в Http вызове, если он не задан. Значение по умолчанию -
1Script v+версия
- Значительно улучшена совместимость классов работы с XML. Реализован класс
ПараметрыЧтенияXML
, исправлен ряд ошибок. - Кодировка UTF-8 по умолчанию для JSONReader имеет значение Utf8БезBom
- Работа СтрШаблон() приведена в соответствие с оригиналом
- Отсутствовал итератор Для Каждого для перечислений
- Улучшена совместимость объекта ОписаниеТипов
- Улучшена совместимость объекта ГенераторСлучайныхЧисел
- Улучшена совместимось функций Символ и КодСимвола
Исправление ошибок
- Исправлено определение кодировки по BOM-метке
- Поведение функционального варианта Новый приведено к 1С
- Ошибка отладчика на точках останова после Выполнить()/Вычислить()
- Некорректно работала обработка значений по умолчанию в конструкторах
- В некоторых случаях исключение внутри цикла
Пока
указывало на неверный номер строки - И другие
Прочие изменения
- Добавлена возможность получения параметров текущего процесса из скрипта, метод ТекущийПроцесс()
- Рефлектор теперь показывает имена параметров методов
- Бамп версии отладчика и требуемой версии VSCode
- Изменена иконка отладчика
v1.7.0
Новое в версии 1.7.0
Новая функциональность
- Поддержка работы с Потоками в классах ДвоичныеДанные, ХешированиеДанных, ЧтениеZipФайла
- Реализованы ранее отсутствовавшие функции работы с двоичными данными: ПолучитьБуферДвоичныхДанныхИзСтроки, ПолучитьСтрокуИзДвоичныхДанных, ПолучитьСтрокуИзБуфераДвоичныхДанных и другие. См. Синтакс-помощник
- Реализована работа с ДвоичнымиДанными большого размера. Ранее, попытка создать ДвоичныеДанные из файла более 2Гб выдавала ошибку.
- Реализована поддержка компонент 1С NativeApi для Linux
- Добавлены встроенные функции НачалоНедели/КонецНедели
- Добавлено свойство СистемнаяИнформация.ТипПлатформы
- Реализована поддержка шифрования в ZIP файлах
- Добавлены средства работы со стандартными потоками в консоли
- Добавлена возможность перехвата/перенаправления стандартного вывода в другой поток (все сообщения Сообщить -> в файл)
Изменения требующие внимания
Добавлено глобальное свойство Консоль
с типом Консоль
. Конструктор класса Консоль
сделан устаревшим.
Получение консоли методом Консоль = Новый Консоль
, который использовался ранее будет выдавать предпреждение в вывод.
Обратная совместимость
Глобальное свойство Консоль
доступно для записи только для значений типа Консоль
, а конструктор Новый Консоль
всегда возвращает синглтон. Таким образом все объекты Консоль являются одним и тем же объектом и ссылаются на глобальное свойство Консоль
.
Для устранения предупреждения - удалите из кода вызовы конструктора Новый Консоль
и замените на глобальное свойство Консоль
Было
Консоль = Новый Консоль;
Консоль.ЦветТекста = ЦветКонсоли.Красный;
Стало:
Консоль.ЦветТекста = ЦветКонсоли.Красный;
Исправление ошибок
Большинство ошибок релиза исправлены Михаилом Рыбакиным (@Mr-Rm). Огромное спасибо!
- fix #1087: аннотации после директив препроцессора; проверка имени
- fix #1113: проверка типа и значения параметра в классе ЧтениеДанных
- fix #1110: не работает ИнтернетПрокси в Linux
- Исправлено падение функции формат для неформатируемых типов
- Исправлено падение ЧтениеТекста.Прочитать() в некоторых ситуациях
- Корректная длина возвращаемой строки в ISAPI обработчике ASP
- И другие
v1.6.0
Новое в версии 1.6.0
Новая функциональность
- Реализован класс "МенеджерФоновыхЗаданий" позволяющий запускать методы в параллельных потоках (на базе Tasks). API немного отличается от 1С, см. синтакс-помощник
МассивПараметров[0] = 1;
МассивПараметров[1] = 2;
ФоновыеЗадания.Выполнить(ЭтотОбъект, "МетодДляВыполненияВФоне", МассивПараметров);
Попытка
ФоновыеЗадания.ОжидатьЗавершенияЗадач();
Исключение
МассивОшибок = ИнформацияОбОшибке().Параметры;
Если МассивОшибок <> Неопределено Тогда
Для Каждого Задание Из МассивОшибок Цикл
Сообщить(ПодробноеОписаниеОшибки(Задание.ИнформацияОбОшибке));
КонецЦикла;
КонецЕсли;
КонецПопытки;
- Реализован класс БлокировкаРесурса, который предназначен для синхронизации доступа к одной переменной из разных потоков (Mutex)
- Реализована трассировка загрузки пакетов. Если задана переменная окружения OS_LRE_TRACE=1 то в консоль выводится трассировка поиска библиотек, что должно помочь при расследовании ошибок поиска библиотеки.
- Обновлен плагин отладчика для VS Code, исправлена ошибка вычисления дочерних переменных в панели watch
- Реализована поддержка ввода многострочной строки методом ВвестиСтроку. Сигнатура ВвестиСтроку() приведена к платформе 1C
Исправление ошибок
- Разрешена пустая строка и пробелы в имени кодировки. Используется в методах, где можно указывать перечисление
КодировкаТекста
или имя кодировки строкой - Исправлены ошибки #1014,#487: Работа внешних компонент после компиляции в EXE при подключении из файла или макета стала более корректной.
- Исправлено сравнение строк при сортировке списков значений и таблий. Поведение приведено к 1С
- Исправлено вычисление дочерних переменных для панели watch в отладчике (требуется обновление плагина отладчика для VSC)
- Прочие мелкие исправления
v2.0-alpha-2
Дистрибутив FDD - требует установки net5.0 runtime правильной разрядности
Дистрибутивы win/linux независимые и не требуют установки net5.0, однако, весят больше.
v2.0-alpha-1
Глубокий рефакторинг ядра 1Script
Данная версия является переработкой внутренних механизмов 1Script и заделом к дальнейшему развитию.
Основные изменения
- Новый парсер языка, реализованный в виде отдельной библиотеки OneScript.Language, позволяющей получать AST языка 1С. Позволяет создавать независимые инструменты анализа кода, обфускаторов, трансляторов, etc
- Более простая интеграция среды исполнения в сторонние приложения
Предупреждение
- Отсутствует обратная совместимость с существующими внешними компонентами. Потребуется перекомпиляция внешних компонент под версию 2.0
v1.5.0
Изменения в версии 1.5.0
Новые возможности
- Реализована поддержка внешних компонент 1С, созданных по технологии Native API. Метод
ПодключитьВнешнююКомпоненту
поддерживает параметр "ТипВнешнейКомпоненты", который, принимая значениеТипВнешнейКомпоненты.Native
позволяет загрузить внешнюю компоненту 1С и работать с ней из языка 1Script. - В классы работы с регулярными выражениями добавлена поддержка именованных групп
- Поддержка работы с синонимами методов в COM классах
- Приложение oscript-config включено в поставку
Исправленные ошибки
- В некоторых ситуациях некорректно расчитывалась сумма в методе ТаблицаЗначений.Свернуть
- Парсер выдавал ошибку на модулях, которые заканчивались директивой
#КонецОбласти
- Директивы препроцессора обрабатывались "по месту", в отличие от 1С, в которой директива препроцессора должна быть единственной синтаксической конструкцией в строке. Поведение приведено к 1С.
- Не контролировалась парность директив
Область/КонецОбласти
. - Не компилировались директивы условной компиляции, в которых выражения начиналось со скобки
- Динамически загруженные модули, созданные из строк, имели одинаковые имена, что в узкоспециальных кейсах приводило к ошибкам.
- В консоли Powershell обращение к свойству ЦветТекста выдавало ошибку
v1.4.0
Изменения в версии 1.4
Улучшения отладчика
Плагин отладчика для Visual Studio Code существенно переработан. Реализована поддержка отладки веб-приложений на 1Script.Web.
Кроме того, для веб-приложений реализован режим attach, который позволяет подключиться к уже работающему веб-приложению. Для этого приложение должно быть запущено в режиме отладки с ключом --debug.port=порт_отладки
Для использования нового протокола отладчика в файле launch.json необходимо указать "protocol": "tcp"
Старый протокол на базе WCF оставлен для совместимости
Прочие изменения
- Выделена отдельная сборка OneScript.DebugServices, предназначенная для подключения отладчика к сторонним приложениям, испольщующим 1Script. Поставляется через NuGet
- Добавлена возможность передачи переменных среды в отлаживаемое приложение. См свойство
env
в файле launch.json - Улучшено отображение COM-объектов в отладчике
- Улучшено отображение свойств объектов в отладчике. Больше не отображается свойство ЭтотОбъект.
- Исправлена ошибка метода Записать() класса БуферДвоичныхДанных (BinaryBuffer.Write()): Не учитывалась начальная позиция записи и запись происходила с 0 позиции целевого буфера.
- Улучшена всплывающая подсказка при наведении на переменную в отладчике.
- Добавлена обработка заголовка "Range" объекта HTTPЗапрос.
- Для методов массива "Добавить" и "Вставить" реализовано необязательное указание параметра "Значение", поведение приведено в соответствие с поведением в 1С.
- Обновление поставляемой версии opm до 0.16.2
- Пакет oscript-config включен в поставку
- Улучшено отображение дерева значений в отладчике
- Исправлена ошибка, возникающая при явном указании направления сортировки ВОЗР в таблице значений
- Исправлена ошибка приведения типов к Булево при коротком вычислении выражений
- Исправлена ошибка метода "Извлечь" класса "ЧтениеZipФайла": в случае файла с некорректным указанием размера/контрольной суммы выбрасывалось исключение и создавался файл со случайным именем, в 1С (или с использованием архиватора) исключение возникает, но файл создается с корректным именем.
- Исправлена ошибка вывода длинных текстовых значений переменных в отладчике
v1.3.0
Изменения в версии 1.3
Новые возможности
- Реализованы операторы
ДобавитьОбработчик/УдалитьОбработчик
. Добавлен методВызватьСобытие
объектаСценарий
для генерации - Реализован класс
"Действие"
позволяющий создавать объекты-делегаты, ссылающиеся на методы
Прочие изменения и исправления ошибок
- Ускорен лексер языка
- Устранены ошибки wcf-отладчика, связанные с размером буфера клиента-сервера отладки
- Изменен API
ScriptingEngine
в части обработчиков директив препроцессора - Удалены устаревшие методы и классы
- Прекращено использование
Costura.Fody
, которое не оправдало себя на Linux - Исправлено поведение файлового потока. Поток теперь разрешает совместное использование для чтения.
- Реализован более подробный вывод текста исключения в EXE, если исключение произошло на системном уровне
- Реализован вывод более детального места возникновения ошибки в EXE, если ошибка произошла на уровне кода 1С
- Реализована корректная загрузка модулей в скомпилированном приложении
события и вызова подписчиков - Исправлена ошибка компилятора, пропускавшего специальным образом составленные операторы завершения блока
- Исправлена ошибка компиляции и выполнения операторов
Прервать
иПродолжить
из многократно вложенных операторовПопытка
- Исправлена сборка пакета RPM
- Обновлена поставляемая версия opm
- Изменен значок приложения TestApp