Skip to content

Releases: EvilBeaver/OneScript

v1.9.1

07 Oct 11:55
Compare
Choose a tag to compare

Ошибка #1395: вызов Рефлектором методов с динамической сигнатурой. Исправление рекомендуется для пользователей фреймворка ОСень. Спасибо @Mr-Rm за исправление!

v2.0.0-rc4

23 Jan 09:15
Compare
Choose a tag to compare
v2.0.0-rc4 Pre-release
Pre-release

Новое в версии 2.0.0-rc4

Новые возможности

  • Реализована возможность создавать собственные классы-коллекции, доступные к обходу в цикле Для Каждого
  • Добавлена поддержка индексов в ТаблицеЗначений
  • В Рефлектор добавлен метод ИзвестныеТипы() который возвращает все зарегистрированные типы в виде ТаблицыЗначений
  • Реализован метод БуферДвоичныхДанных.Разделить()
  • При вызове метода через Рефлектор контролируется сигнатура метода и количество параметров
  • Добавлена возможность управления флагом "TCP_NODELAY" в объекте TcpClient
  • Улучшена документация, добавлены инструкции по сборке в файл README
  • В библиотеку парсера OneScript.Language добавлены синтаксические конструкции Асинх/Ждать и поддержка меток (Рантаймом не поддержано)

Исправление ошибок

  • Исправлены различные ситуации вызова COM-методов, повышена стабильность работы с COM-объектами
  • Исправлена ошибка при переопределении строкового представления объектов. В ряде случаев, переопределенное представление приводило к вызову другого метода
  • Отладчик неверно работал с индексацией переменных и мог показывать неверные значения
  • Для MacOSX и Linux изменено поведение запуска процесса в части разбора командной строки. (Experimental)
  • И другие

v1.9.0

23 Jan 09:06
Compare
Choose a tag to compare

Новое в версии 1.9.0

Новые возможности

  • В Рефлектор добавлен метод ИзвестныеТипы() который возвращает все зарегистрированные типы в виде ТаблицыЗначений
  • Реализован метод БуферДвоичныхДанных.Разделить()
  • При вызове метода через Рефлектор контролируется сигнатура метода и количество параметров
  • Улучшена документация, добавлены инструкции по сборке в файл README
  • В отладчике теперь отображаются в том числе приватные (не экспортные) переменные объектов

Исправление ошибок

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

Благодарности

Огромное спасибо авторам, сделавшим данный релиз возможным:

  • Сергей Батанов
  • Михаил Рыбакин

Также большое спасибо всем, кто сообщал о найденных ошибках и помогал их исправлять:

Постскриптум

Данный минорный релиз (1.9), я надеюсь, будет последним в ветке 1.x. Критичные ошибки будут исправляться, но новых функций добавляться, скорее всего, не будет. Версия 1.x получит статус Long-Term-Support (LTS) и в нее будут портироваться все важные ошибки, которые для нее будут актуальны.

Предлагаю сообществу потихоньку переходить версию 2.0, тестировать, проверять, сообщать об ошибках. Данное положение пока не окончательное, время покажет, но пока планы именно такие.

v2.0.0-rc3

16 Oct 12:24
Compare
Choose a tag to compare
v2.0.0-rc3 Pre-release
Pre-release

v2.0.0-RC3 Предварительная версия

  • Исправлено большое число ошибок режима native
  • Исправлено большое число ошибок стандартного режима
  • Синхронизированы изменения с версией 1.х
  • Повышена стабильность работы

Почему стоит переходить на версию 2.0

  • Более современный и быстрый .NET, 1Script работает быстрее
  • Самостоятельная поставка в виде self-contained deployment (SCD), не требующая установки .net на целевую машину
  • Строго-типизированный статический компилятор для высоконагруженых участков кода (экспериментальная фича) позволяет компилировать язык 1С напрямую в коды машины .NET а затем в машинный код. Производительность на уровне чистого C#

v1.8.4

26 Sep 16:48
Compare
Choose a tag to compare

Новое в версии 1.8.4

Исправление ошибок

  • Некорректное поведение ЗаписатьJSON->ПрочитатьJSON для значений Неопределено
  • Отладчик: выражения в watch вычисляются без учета выбранного фрейма стека вызовов
  • Вложенные операции Выполнить выдавали ошибку
  • Не обрабатываются исключения в Выполнить()
  • Неверно форматируется пустая дата, исправлено поведение функции Формат
  • Функции ЧтениеДанных.ПрочитатьЦелоеXX() не возвращают Неопределено в конце потока
  • Функция ПолучитьИмяВременногоФайла() без параметров не устанавливает расширение ".tmp"
  • Компилируются ошибочные выражения с оператором НЕ
  • Реализован контроль обязательных и пропускаемых параметров встроенных функций
  • Запрещено сравнение значений перечислений на больше-меньше. Поведение приведено в соответствие с 1С
  • Не возвращалось значение выходных параметров при вызове COM-объектов
  • При исполнении делегата в фоновом задании, результат исполнения делегата не помещался в Результат фонового задания
  • Исправлен алгоритм приведения типов в методе ОписаниеТипа.ПривестиЗначение. Поведение приведено в соответствие с 1С
  • XMLЗначение: исключение при передаче имени системного перечисления.

Новые возможности

  • Обновлен плагин отладчика для VSCode, для поддержки функции Disconnect обновите отладчик.
  • Добавлена поддержка логирования протокола отладчика, может быть полезно при расследовании ошибок отладки
  • Добавлено управление флагом debug.wait в конфигурации запуска отладки для режима oscript.web
  • Добавлены примеры настроек отладчика в README пакета расширения
  • В перечисление ЦветаКонсоли добавлены дополнительные цвета

v2.0.0-rc2

18 Mar 12:41
Compare
Choose a tag to compare
v2.0.0-rc2 Pre-release
Pre-release

Релиз-кандидат версии 2

  • Исправлены найденные ошибки версии rc1
  • Синхронизированы доработки с версией 1.х

v1.8.3

26 Feb 20:21
Compare
Choose a tag to compare

Новое в версии 1.8.3

Большинство доработок в релизе это исправления ошибок и функциональность, необходимая проектам ОСень и winow.

Улучшения

  • Рефлектор возвращает таблицу значений для параметров аннотаций, даже если параметров нет. Ранее возвращал Неопределено.
  • Реализована возможность работать с приватными полями через Рефлектор
  • Обновлен Newtonsoft.Json (требование безопасности)

Исправление ошибок

  • Не отлаживались фоновые задания
  • Исправлена ошибка кеширования результатов Выполнить/Вычислить
  • Существовала возможность выполнить приватный метод стороннего скрипта через механизм подписок на события
  • Исправлены некоторые ошибки в компиляторе и отладчике

Благодарности

  • Традиционная благодарность @Mr-Rm за поиск и исправление самых сложных и запутанных ошибок
  • @Macegor за упорство в отладке фоновых заданий
  • @Absolemus за его первый пулреквест "вслепую" без знания C#
  • @nixel2007 и @Nivanchenko за мотивацию доработать рефлектор

v1.8.2

28 Dec 20:18
Compare
Choose a tag to compare

Новое в версии 1.8.2

Улучшения

  • Рефлектор показывает значения параметров по умолчанию для методов

Исправление ошибок

  • Не отлаживались фоновые задания
  • В отладке вычисление выражений WATCH иногда выдавало ошибку "Индекс за пределами диапазона"

v1.8.1

04 Nov 13:27
Compare
Choose a tag to compare

Новое в версии 1.8.1

Улучшения

  • В класс Поток добавлены свойства ТаймаутЧтения, ТаймаутЗаписи, ДоступенТаймаут
  • Класс СистемнаяИнформация лучше распознает запуск на MacOS
  • Добавлено свойство ИмяЯдра в класс СистемнаяИнформация
  • Существенно ускорена работа Вычислить/Выполнить для повторных вызовов неизмененного текста (добавлен LRU-кэш для компилируемых Вычислить/Выполнить)
  • Оптимизировано время запуска фоновых заданий. Короткоживущие задания создаются более эффективно при частом вызове. Для длительных заданий добавлен флаг longRunning
  • Небольшие микрооптимизации механики вызова методов

Исправление ошибок

  • Улучшена локализация ошибок (некоторые ошибки не имели английского текста)
  • Более корректное закрытие объекта ЗаписьJSON при записи в строку
  • Доступ к внутренней коллекции потоков был неконкурентным, что приводило к ошибкам в нагруженных приложениях Oscript.Web
  • Исправлены ошибки выполнения, когда с помощью запятых опускался обязательный аргумент метода НекийМетод(,,)

v2.0.0-rc1

24 Sep 19:59
Compare
Choose a tag to compare
v2.0.0-rc1 Pre-release
Pre-release

Релиз-кандидат №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