Skip to content

Releases: EvilBeaver/OneScript

v1.2.0

11 Feb 08:18
Compare
Choose a tag to compare

Организационные изменения

Состоялся выпуск 64-разрядной сборки. Теперь основные дистрибутивы имеют 2 варианта - x86 и x64 (который по-факту является версией AnyCPU)

32-разрядную сборку рекомендуется применять для взаимодействия с 32-битной версией 1С:Предприятия с помощью COM-Соединителя. В остальных случаях - рекомендуется использовать сборку x64.

С версией 1.2 рекомендуется использовать отладчик версии 0.5.0

Изменения в версии 1.2

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

  • Добавлены методы работы с часовыми поясами: ЧасовойПояс, СмещениеСтандартногоВремени, УниверсальноеВремя, МестноеВремя, ПредставлениеЧасовогоПояса, ТекущаяУниверсальнаяДата
  • Добавлены методы ПолучитьБуферДвоичныхДанныхИзHexСтроки, ПолучитьHexСтрокуИзДвоичныхДанных, ПолучитьHexСтрокуИзБуфераДвоичныхДанных
  • Добавлен конструктор объекта ЧтениеТекста на основании Потока
  • Улучшена диагностика места возникновения ошибки в модулях, скомпилированных в EXE
  • Развитие отладчика: в окне просмотра отображаются элементы объектов-коллекций.
  • Развитие отладчика: доступно вычисление значений при наведении мыши на переменную в тексте модуля, а также табло Intermediate
  • Реализованы условные директивы препроцессора Если..Тогда. Стандартными символами являются Linux, MacOS, Windows. При запуске на определенной платформе переменная препроцессора будет иметь значение Истина. Пользовательские директивы можно задать в параметре конфигурации preprocessor.define
  • Выполнен рефакторинг лексического анализатора. Выделена nuget-библиотека OneScript.Language, содержащая лексический анализатор кода на языке 1С. Библиотека распространяется, как экспериментальная.
  • Реализована установка свойств объектов с помощью Рефлектора

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

  • Улучшена совместимость методов работы с двоичными данными между 1Script и 1С
  • Не работает передача параметров по значению в Выполнить
  • Ошибка загрузчика, вызывающего падение при обращению к глобальному контексту в момент инициализации библиотек
  • Исправлено возникновение ошибки "Не удалось создать защищенный канал TLS/SSL"
  • Методы Сдвинуть ТаблицыЗначений и СпискаЗначений работают циклично (совместимость с 1С)
  • NPE в методе РегулярноеВыражение.Заменить
  • Не работала передача параметров по-умолчанию в методы текущего модуля, вызванные из Выполнить
  • И другие

v1.1.1

11 Feb 08:16
Compare
Choose a tag to compare

Организационные изменения

Проект перешел на semantic versioning с трехзначной идентификацией основного номера релиза. Теперь команде станет проще выпускать релизы, а сообществу - идентифицировать уровни изменений.

Изменения в версии 1.1

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

  • Добавлена поддерка XML-схем. Реализован класс XMLСхема и ему сопутствующие (спасибо yukon39 за масштабную доработку)
  • Добавлена функциональность "Макетов". Теперь можно упаковывать в EXE не только скриптовый код, но и произвольные данные, а затем обращаться к ним единообразно
  • Оптимизирован метод Свернуть таблицы значений
  • Реализована поддержка dynamic в объектах 1Script. Упрощено встраивание в приложения .NET
  • Реализована локализация выводимых ошибок в зависимости от языка системы. Добавлен конфигурационный параметр systemlanguage в oscript.cfg (спасибо alexkmbk).
  • В СоединениеHTTP всегда используется автоматический редирект. Реализовано свойство РазрешитьАвтоматическоеПеренаправление для управления редиректом (спасибо Vladimir Bondarevskiy)
  • В соединении HTTP реализована автоматическая распаковка ответов, закодированных в gzip (спасибо Vladimir Bondarevskiy)
  • Оптимизирована производительность оператора Новый
  • Реализована часть ранее не реализованных методов в классах работы с двоичными данными
  • Реализовано управление кодировкой ZIP-архивов. Добавлено системное перечисление КодировкаИменФайловВZipФайле
  • Много других мелких улучшений.

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

Благодаря Michael Rybakin в релизе исправлено множество самых разных ошибок, включая несоответствия поведению 1С на необычных сценариях.

  • Внутреннее представление даты содержит микросекунды и искажает сравнение дат
  • Некорректная работа метода СписокЗначений.СортироватьПоПредставлению
  • Исправлена рефлексия типов при работе под Mono+Linux
  • Повторяюшиеся имена колонок ТаблицыЗначений добавляются в список колонок
  • Метод Массив.Вставить расширяет границы массива при вставке за пределы массива
  • Не работает конструктор объекта ЧтениеДанных и ЗаписьДанных при указании параметров дальше 2-го
  • Отсутствовал конструктор массива по фиксированному массиву
  • Некорректно отображались значения СтрокиТаблицыЗначений в отладчике
  • Поведение метода Удалить структуры не соответствовало 1С при удалении несуществующего свойства
  • Некорректное экранирование символов / и \ при работе с JSON
  • Некорректное поведение методов DataReader.ReadIntoBinaryDataBuffer, DataReader.ReadIntoBinaryDataBuffer(Count), MemoryStream.CloseAndGetBinaryData.
  • Не было реализовано побайтовое сравнение двоичных данных оператором равенства
  • Поведение метода Pow для возведения в степень приведено в соответствие с 1С
  • Литерал даты из одних нулей в 1С распознается, как корректный. Приведено поведение к 1С
  • Строковое представление двоичных данных не работало в Linux. Под Win не соответствовало 1С
  • Функция Формат зависала на некоторых форматных строках
  • Исправлена ошибка функции Цел на больших числах

v1.0.21

24 Sep 14:32
Compare
Choose a tag to compare

Изменения в версии 1.0.21

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

  • Реализована возможность получать стектрейс при возникновении исключения. См. метод ПолучитьСтекВызовов() объекта ИнформацияОбОшибке
  • Реализован метод глобального контекста ПрочитатьJson (ReadJson).
  • Реализован метод глобального контекста ЗаписатьJSON. В текущей версии обрабатывается только первые два параметра: ЗаписьJSON и Значение.
  • Существенно улучшена совместимость чтения/записи JSON с платформой 1С
  • Развитие возможностей рефлексии для приложений, встраивающих ScriptEngine.dll
  • Развитие рефлектора: поддержка аннотаций, приватных методов, встроенных и пользовательских типов
  • Реализована поддержка параметра СимволыОступа в ЗаписьXML.
  • ЗаписьXML: Реализована поддержка параметра "ДобавлятьBOM"
  • Реализован оператор "Унарный плюс
  • Добавлено свойство "УдаленныйУзел" в TCPСоединение closes #732
  • Строковое представление ДвоичныхДанных в hex-виде (совместимость с 1С)

Оптимизация и исправление ошибок

  • Исправление: Не поддерживалось значение типа single в COMОбъектах
  • Исправлена ошибка: в ЧтениеJSON не обрабатывались значения типа DateTime
  • Исправлено отсутствие экранирования двойных кавычек в объекте ЗаписьJson
  • ЗаписьXML: Исправлен неверный вывод комбинации /
  • Исправлена ошибка: ЗаписатьЦелое16 записывает 4 байта вместо двух
  • Исправлена несовместимая с 1С компиляция литералов дат.
  • Исправлено несовместимое с 1С поведение ф-ии СтрРазделить для пустых строк
  • Исправлена ошибка в методе Вставить класса Соответствие. Не разрешалось опускать параметр Значение.
  • Исправлена ошибка метода ЗаполнитьЗначенияСвойств при указании параметра "Заполняемые свойства"
  • Исправлена ошибка компиляции отрицательных чисел в параметрах по-умолчанию
  • Исправлено обращение к https-сервисам с новыми версиями протокола TLS
  • Ускорен процесс компиляции модулей из-под отладчика IDE

v1.0.20

21 May 10:08
Compare
Choose a tag to compare

Изменения в версии 1.0.20

Аннотации

Добавлена возможность применения аннотаций для методов модулей. Аннотации применяются в языке 1С начиная с версии 8.2 и широко известны под именем "Директивы компиляции".
С появлением в платформе 1С "расширнений конфигурации" термин "Аннотация" уже официально появился в описании синтаксиса языка 1С.
Так, например, в расширении конфигурации 1С могут применяться аннотации методов &Перед, &Вместо и &После.

В 1Script аннотации применяются для произвольной разметки методов и/или параметров методов. Установленные аннотации можно прочесть с помощью Рефлектора.
Подробное описание в документации

Получение представления объекта

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

  • Представление - выходной параметр, новое значение представления
  • СтандартнаяОбработка - флаг отмены стандартной обработки

Прочие изменения

  • Формат проектов переведен на современные веяния .NET
  • Сборка NUGET включает в себя варианты для .NET Framework и .NET Standard
  • Внесены изменения в ядро, позволяющие применять 1Script в многопоточных приложениях наподобие IIS и Kestrel
  • Устранен ряд проблем, усложняющих встраивание 1Script в сторонние приложения в качестве скриптового движка
  • Улучшена работа HTTPСервисов для ASP.NET
  • Добавлен метод ПолучитьТелоКакПоток в классе ОтветHTTP
  • Добавлено получение двоичных данных из XML строки
  • Добавлен параметр ИспользоватьBOM в объект HTTPЗапрос
  • В методы ПеременныеСреды и ПолучитьПеременнуюСреды добавлена Цель - местоположение переменной среды (см. перечисление РасположениеПеременнойСреды)

Оптимизация и исправление ошибок

  • Исправлена работа метода ЗаполнитьЗначенияСвойств для класса Сценарий
  • Метод Сред выдавал ошибку, если второй параметр выводил за пределы строки
  • Исправлены замечания по статическому анализу SonarQube
  • Не работали конструкторы объектов ЧтениеДанных, ЗаписьДанных и ПотокВПамяти
  • Исправлен ряд несовместимых с 1С поведений в необычных/нестандартых ситуациях.
  • Английские синонимы примитивных типов
  • Исправлено падение HTTP-сервисов в многопоточной среде
  • В ряде ситуаций некорректно работали неуправляемые COM-объекты
  • Исправлено обращение к локальным переменным внутри Выполнить
  • Нельзя было задать свойства Keep-Alive и Close в HTTPЗапросе
  • Исправлена ошибка неверного значения по умолчанию для параметра "ВключаяПустые" метода СтрРазделить
  • Добавлен алиас StringStartsWith. StrStartWith объявлен устаревшим
  • Исправлена работа exe от oscript -make под mono
  • Ряд прочих небольших исправлений

v1.0.19

10 Jan 09:56
Compare
Choose a tag to compare

Новая функциональность

  • Добавлен новый вид приложения - Обработчик HTTP-сервисов. Это отдельный компонент поставки, представляющий собой ISAPI-обработчик для сервера IIS или Apache. Данный компонент позволяет реализовать веб-сервисы на 1Script, работающие по идеологии http-сервисов в системе 1С:Предприятие.
    Подробнее читайте на сайте oscript.io
  • Реализованы классы ЧтениеДанных и ЗаписьДанных. Реализация данных классов частичная, не до конца совпадающая с 1С. Публикуются в статусе ознакомительной функциональности.
  • Рефлексия по типам объектов. Класс Рефлектор позволяет определять состав методов и свойств не только для экземпляров объектов, но и для определенного типа объектов.

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

  • Изменен приоритет поиска библиотек. Сначала обрабатываются библиотеки, перечисленные в параметре lib.additional и только потом - библиотеки из параметра lib.system
  • В класс ЧтениеТекста в конструктор "по имени файла" и метод "Открыть" добавлен флаг «Монопольно» для указания признака монопольного захвата файла. Обеспечена совместимость с новыми версиями платформы 1С.
  • Реализован синтаксис "пропуска" обязательных аргументов методов. Обеспечена совместимость с 1С.
  • Реализована "ленивая" инициализация всех классов, что позволяет ускорить старт приложения
  • Рефлектор сохраняет регистр имени при получении списка свойств/методов
  • Функция ЗначениеЗаполнено для значения Null возвращает Ложь
  • Изменен англоязычный терм метода ЗначениеЗаполнено. Новое имя - ValueIsFilled, как в оригинальной платформе.
  • В отладчике исправлена ошибка старта отладки для файла, путь к которому содержит пробелы.
  • Не всегда обрабатывался синтаксис "необязательных" точек с запятой в последнем операторе блока.
  • Добавлен английский терм для ThisObject.
  • Оптимизирована компиляция модулей с большим количеством констант
  • Исправлена ошибка: В отладчике нельзя снять последнюю точку останова в файле
  • Исправлена ошибка: Не отрабатывает встреча брейкпоинта по пути перешагивания
  • Исправлена ошибка: Нарушение состояния машины при выбросе исключения внутри выражения.
  • Исправлена ошибка создания CLR-объектов в Mono.
  • При поиске типов для ComОбъект в первую очередь ищутся COM-объекты, а потом - CLR-типы в подключенных сборках.

v1.0.18

24 Oct 14:45
Compare
Choose a tag to compare

Изменения в версии 1.0.18

Версия 1.0.18 это довольно существенный шаг в развитии 1Script. В данной версии появился отладчик скриптов для VisualStudio Code.

Разработка отладчика потребовала значительной доработки ядра системы, что, в свою очередь, позволило закрыть давние архитектурные недостатки. Их все равно еще много, но стало меньше - это радует).

Отладка скриптов

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

Для получения отладчика необходимо поставить расширение VSC под названием OneScript Debug.

Поддержка функций «Выполнить» и «Вычислить»

Появление отладчика потребовало реализации функций вычисления кода по строке. Теперь штатные функции из 1С также появились в 1Script.

Доработки и развитие

  • Реализована возможность работы с родными типами CLR через механизм COM-объектов.
  • Добавлена функция ЗагрузитьСценарийИзСтроки, позволяющая создавать объект сценария из строки без записи в промежуточный файл.
  • Битовые функции
  • Ретаргетинг на v4.5.2 Для работы 1Script требуется .NET Framework версии 4.5.2 или выше
  • Реализован англоязычный литерал ElsIf. Несовместимый с 1С литерал ElseIf объявлен устаревшим
  • В случае указания протокола https в HttpСоединение отключается проверка клиентских сертификатов.
  • Добавлена возможность явного закрытия объекта ХэшированиеДанных.
  • При попытке повторно подключить класс с одним и тем же именем выдается ошибка. Ранее подключение другого класса просто игнорировалось.
  • В ряде случаев некорректно работал ключ -make как во время сборки, так и во время запуска EXE.
  • В рефлекторе исправлен вызов методов, в которых присутствуют параметры по-умолчанию.
  • Исправлена ошибка компиляции булевых операторов в качестве свойств.
  • Добавлен конструктор, создающий структуру по данным другой структуры.
  • Не хватало английских синонимов в разных местах

v1.0.17

12 Jul 20:50
Compare
Choose a tag to compare

Изменения в версии 1.0.17

Конструкторы

Добавлена возможность объявлять конструкторы для собственных классов.

При создании класса через оператор Новый 1Script выполнит поиск процедуры со специальным именем ПриСозданииОбъекта/OnObjectCreate.

Пример

// файл main.os
ПодключитьСценарий("C:\someclass.os", МойКласс);
МойОбъект = Новый МойКласс("Привет", ТекущаяДата());

// файл someclass.os
Процедура ПриСозданииОбъекта(Сообщение, Дата)
    Сообщить(Строка(Дата) + ":" + Сообщение);
КонецПроцедуры

Сообщить("Инициализация");

При запуске файла main.os на экран будет выведено следующее:

Инициализация
01.07.2017:Привет

То есть, сначала в любом случае будет выполнена секция инициализации (тело модуля), а затем конструктор.

Параметры процедуры-конструктора учитываются при вызове оператора Новый. Если передано большее или меньшее число параметров - диагностируется ошибка.

Прочие изменения

  • Добавлена возможность переопределения настроек в переменной окружения OSCRIPT_CONFIG
    • Значение переменной задается по правилам "Форматной строки 1С" из ф-ии Формат
    • Пары ключ/значение разделяются точкой с запятой. Значения ключей могут быть обернуты в кавычки.
  • В режиме CGI добавлен метод ОтправитьФайл. Позволяет отправить файл на клиент (скачивание файлов из веб-сервиса на oscript)
  • Расширены возможности объекта СистемнаяИнформация. Добавлены средства работы с логическими дисками, специальными папками, определения разрядности и др.
  • Добавлены глобальные методы работы с переменными окружения
    • ПолучитьПеременнуюСреды
    • УстановитьПеременныеСреды
    • ПеременныеСреды
    • Одноименные методы класса СистемнаяИнформация объявлены устаревшими. При их использовании в консоль выдается предупреждение об устаревшем коде.
  • Упразднен класс КоллекцияАргументовКоманднойСтроки. Вместо него, глобальное свойство АргументыКоманднойСтроки возвращает ФиксированныйМассив.
  • Добавлен метод ПолучитьCOMОбъект() аналогичный 1С
  • Добавлен метод Консоль.Сигнал
  • Для сборки под Linux используется msbuild вместо xbuild.
  • Существенно стабилизировано чтение потоков процессов.
  • Добавлена возможность таймаута на ожидании завершения процесса

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

  • Ключи -check -compile выдают ошибку: Object reference not set to an instance of an object
  • Не обрабатывались значения типа decimal, получаемые из COM-объектов
  • ИмяВыходногоФайла в методах объекта HTTPСоединение может быть пустой строкой
  • Метод ПотокВыводаТекста.Прочитать() возвращает пустую строку, вместо Неопределено
  • Не отрабатывает ЗаписьZipФайла для файлов больше 4 Гб
  • Несовместимость с 1С при удалении файлов из несуществующего пути
  • Некорректный разбор строкового литерала в месте EOF
  • и др.

v1.0.16

12 Jul 15:03
Compare
Choose a tag to compare

Изменения в версии 1.0.16

Важные изменения

  • Оптимизирована загрузка взаимозависимых классов и модулей
  • Изменено поведение чтения IO-потоков запущенных процессов. Исключены взаимоблокировки, неустранимые из кода oscript.
  • Реализован ключ -codestat для вывода статистики выполнения кода. Используется при расчете покрытия тестами.

Прочие изменения

  • Добавлен объект ОписаниеТипов
  • В случае ошибки циклических зависимостей выдается список обхода загружаемых библиотек.
  • Исправлен алгоритм поиска в Найти/СтрНайти. Поведение приведено в соответствие с 1С
  • XML: Воплощение свойства КонтекстПространствИмен.

v1.0.15

27 Dec 20:36
Compare
Choose a tag to compare

Изменения в версии 1.0.15

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

  • Добавлена экспериментальная поддержка классов работы с двоичными данными. Особенности реализации приведены ниже.
    • Не реализованы классы ЧтениеДвоичныхДанных/ЗаписьДвоичныхДанных, т.к. они в значительной мере дублируют другие классы.
    • Не реализованы методы Разделить и ПолучитьСрез класса БуферДвоичныхДанных
    • Не реализован метод СоздатьВременныйФайл в классе МенеджерФайловыхПотоков
    • Требуются добровольцы для тестирования и развития данной категории классов.
  • Добавлены объекты ЧтениеJSON/ЗаписьJSON. Поддерживается только потоковая работа с JSON.
    • Остальные возможности платформы 1С:Предприятие по работе с JSON не реализованы и ждут своего часа.
  • Добавлен параметр "Использовать BOM" для управления необходимостью добавления BOM в текстовых файлах.
  • В проверку синтаксиса добавлен режим CGI. Вызов oscript -check -cgi myscript.os выполняет синтаксическую проверку с учётом глобальных свойств ВебЗапрос и WebRequest.
  • Файлы *.exe принудительно сделаны 32-битными.
  • В oscript.cfg добавлена настройка http.strictWebRequest. Она отвечает за строгое следование протоколу http. По умолчанию настройка отключена
  • Реализована необязательность параметров конструктора ЗаписьZipФайла
  • При повторном объявлении символа в текст исключения теперь выводится имя этого символа.
  • Добавлена возможность указания настроек ИнтернетПрокси вручную
  • Для внешнего исключения выводится точное имя возникшего исключения
  • Удален проект Снегопата из решения.

Изменения требующие доработки существующих скриптов (breaking changes!)

  • Поведение классов ТекстовыйДокумент, ЧтениеТекста и ЗаписьТекста приведено в соответствие с 1С в части разделителей строк.
    • Добавлены параметры конструкторов, отвечающие за обработку разделителей строк.
    • Устранена несовместимость сигнатур конструкторов с 1С.
  • Во всех средах по-умолчанию используется перевод строк ВК+ПС для совместимости и единообразия.

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

  • Не компилируются литералы Неопределено, Истина, Ложь, Null в качестве свойств структур
  • Исправлено поведение метода ФиксированноеСоответствие.Получить()
  • Поведение рефлектора в части параметров, передаваемых по ссылке приведено к ожидаемому.
  • Метод НайтиФайлы не обрабатывает символические ссылки
  • Исправлена ошибка передачи необязательных параметров в managed COM
  • Исправлено поведение объекта Файл, инициированного пустой строкой.
  • Указание каталога по относительному пути приводило к тому, что в ZIP попадал полный путь вместо относительного.
  • Метод ПодключитьВнешнююКомпоненту не подключал глобальные контексты, объявленные в компоненте.
  • Изменен алгоритм разбора командной строки в методе ЗапуститьПриложение
  • Доработана функция ЗаписьXML.НайтиПрефикс
  • Было возможно объявить переменную после кода в некоторых случаях.
  • В форматной строке перепутаны английские значения для булевых переменных.

v1.0.14

18 Jul 16:47
Compare
Choose a tag to compare

Изменения в версии 1.0.14

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

  • Поведение СтрШаблон отличается от поведения в 1С. Неопределенные параметры не должны учитываться при подсчете количества аргументов
  • Неверное англоязычное наименование у метода Файл.Существует()
  • Поведение свойств объекта Файл отличается от 1С для объектов, инициированных относительным путем.
  • Работа свойства Файл.Путь для корневого каталога выдавала ошибку
  • Нельзя обратиться к ЦветТекста/ЦветФона консоли до их инициализации
  • Нет свойства Параметры у непараметризованного исключения
  • Форматная строка ЧДЦ=1 выдавала ошибку.
  • При передаче в цикл Для..По нечисловой верхней границы, текст исключения не позволял понять суть ошибки.