Releases: EvilBeaver/OneScript
v1.2.0
Организационные изменения
Состоялся выпуск 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
Организационные изменения
Проект перешел на 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
Изменения в версии 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
Изменения в версии 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
Новая функциональность
- Добавлен новый вид приложения - Обработчик 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
Изменения в версии 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
Изменения в версии 1.0.17
Конструкторы
Добавлена возможность объявлять конструкторы для собственных классов.
При создании класса через оператор Новый
1Script выполнит поиск процедуры со специальным именем ПриСозданииОбъекта/OnObjectCreate
.
Пример
// файл main.os
ПодключитьСценарий("C:\someclass.os", МойКласс);
МойОбъект = Новый МойКласс("Привет", ТекущаяДата());
// файл someclass.os
Процедура ПриСозданииОбъекта(Сообщение, Дата)
Сообщить(Строка(Дата) + ":" + Сообщение);
КонецПроцедуры
Сообщить("Инициализация");
При запуске файла main.os на экран будет выведено следующее:
Инициализация
01.07.2017:Привет
То есть, сначала в любом случае будет выполнена секция инициализации (тело модуля), а затем конструктор.
Параметры процедуры-конструктора учитываются при вызове оператора Новый
. Если передано большее или меньшее число параметров - диагностируется ошибка.
Прочие изменения
- Добавлена возможность переопределения настроек в переменной окружения OSCRIPT_CONFIG
- Значение переменной задается по правилам "Форматной строки 1С" из ф-ии
Формат
- Пары ключ/значение разделяются точкой с запятой. Значения ключей могут быть обернуты в кавычки.
- Значение переменной задается по правилам "Форматной строки 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
Изменения в версии 1.0.16
Важные изменения
- Оптимизирована загрузка взаимозависимых классов и модулей
- Изменено поведение чтения IO-потоков запущенных процессов. Исключены взаимоблокировки, неустранимые из кода oscript.
- Реализован ключ -codestat для вывода статистики выполнения кода. Используется при расчете покрытия тестами.
Прочие изменения
- Добавлен объект ОписаниеТипов
- В случае ошибки циклических зависимостей выдается список обхода загружаемых библиотек.
- Исправлен алгоритм поиска в Найти/СтрНайти. Поведение приведено в соответствие с 1С
- XML: Воплощение свойства
КонтекстПространствИмен
.
v1.0.15
Изменения в версии 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
Изменения в версии 1.0.14
Исправления ошибок
- Поведение
СтрШаблон
отличается от поведения в 1С. Неопределенные параметры не должны учитываться при подсчете количества аргументов - Неверное англоязычное наименование у метода
Файл.Существует()
- Поведение свойств объекта
Файл
отличается от 1С для объектов, инициированных относительным путем. - Работа свойства
Файл.Путь
для корневого каталога выдавала ошибку - Нельзя обратиться к
ЦветТекста/ЦветФона
консоли до их инициализации - Нет свойства
Параметры
у непараметризованного исключения - Форматная строка ЧДЦ=1 выдавала ошибку.
- При передаче в цикл
Для..По
нечисловой верхней границы, текст исключения не позволял понять суть ошибки.