Выпуск 2.2.0 - #1733
Merged
Merged
Conversation
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…tions/checkout-7 Bump actions/checkout from 6 to 7
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@v5...v6) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…tions/cache-6 Bump actions/cache from 5 to 6
Немного ясности в пробросе процесса в компонент.
fix #1705: проверка приемника данных; возврат строки из Закрыть
fix #1707: совместимость и обработка ошибок в ЗаписатьТипДокумента
Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 5 to 6. - [Release notes](https://github.com/actions/setup-dotnet/releases) - [Commits](actions/setup-dotnet@v5...v6) --- updated-dependencies: - dependency-name: actions/setup-dotnet dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…tions/setup-dotnet-6 Bump actions/setup-dotnet from 5 to 6
По замечаниям мэйнтейнера в PR #1725. Связь процесса с его bsl-объектом ПотокИсполнения жила в статической ConditionalWeakTable. За такой коллекцией надо следить, а сам класс - из запчастей компилятора, не прикладной. Теперь процесс носит поток исполнения в своём свойстве и завершает его сам: IBslProcess стал освобождаемым, а владельцы процессов перешли на using вместо явного вызова завершения. Статическая коллекция и метод Release удалены. Тип свойства - новый интерфейс IBslExecutionThread в OneScript.Core. Через него ПотокИсполнения виден движку, который не знает и не может знать про OneScript.StandardLibrary. Отдельный интерфейс вместо IDisposable выбран потому, что ОсвободитьОбъект приводит значение к IDisposable: с ним из bsl можно было бы завершить живой поток вызовом ОсвободитьОбъект(ТекущийПоток()). Поток снимается с процесса после завершения, а не до: обработчик ПриЗавершении вправе обратиться к ТекущийПоток() и должен получить свой поток, а не новый и пустой. Защита от повторного завершения перенесена внутрь потока - так она ловит и случай, когда обработчик сам освободит процесс. Событие поднимает сам поток исполнения, своим именем-константой - так же, как это делает ConsoleContext со своим CancelKeyPressed. Процесс поток держит полем, по образцу ConsoleContext с ExecutionContext. Попутно закрыто место, до которого раньше было не дотянуться: ExceptionInfoFactory живёт в ScriptEngine и вызвать завершение из StandardLibrary не мог, а освободить процесс - может. Убран CanWrite = false у свойств без сеттера: запись и так запрещена отсутствием сеттера, а в стандартной библиотеке так объявлены 650 свойств из 658. Переписаны формулировки в комментариях. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ZfXJeyPJxZxtooYQzTt7s
BslProcess создаёт себе область сервисов в конструкторе, но не освобождал её никогда: scoped-регистрации процесса жили до конца работы движка. Теперь, когда процесс стал освобождаемым, у этого появилось место. Область освобождается последней: завершение потока исполнения обращается к ней за процессором событий. Освобождение сделано идемпотентным. Проверено, что дочерний контейнер TinyIoC не заденет чужое: родительские фабрики он берёт транзитом через GetParentObjectFactory и в собственный реестр не кладёт, а Dispose обходит только его. Второй тест это фиксирует - освобождение одного процесса не трогает область другого. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ZfXJeyPJxZxtooYQzTt7s
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.7.0 to 6.0.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@v5.7.0...v6.0.0) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…tions/setup-java-6.0.0 Bump actions/setup-java from 5.7.0 to 6.0.0
Кешировать MethodInfo AddSeconds/SubtractSeconds, выбирать метод через switch expression и строить операцию через Expression.Add/Subtract. Проверка неподдерживаемых opcode сохранена. Co-authored-by: ovsiankin.aa <ovsiankin.aa@gmail.com>
Fix #1656 Сериализация дат и приведение точности дат к 1С
Новый `.iss` файл для сборки установщика Windows
Устранены расхождения поведения OneScript и 1С при работе с внешними компонентами Native API. - Закрепить делегаты колбэков компоненты, чтобы вызовы из нативного кода переживали GC - Корректно выделять и освобождать массивы tVariant (зануление памяти, FreeVariant по count) - Возвращать out-параметры методов в скрипт после вызова - Регистрировать типы по имени расширения (RegisterExtensionAs / GetExtensionName) - Управлять жизненным циклом библиотек через IEngineLifetime и NativeApiFactory - Поддержать обмен значениями типа Дата (VTYPE_DATE/VTYPE_TM) - Разделить освобождение managed- и unmanaged-ресурсов библиотеки Добавлены тесты обмена параметров и устойчивости к GC при колбэке ошибки. Co-authored-by: Cursor <cursoragent@cursor.com>
…pihb Функция ТекущийПоток(): данные и событие завершения потока исполнения
CLI -c — исполнение кода из строки
На не-Windows системах СоздатьПроцесс разбирает командную строку через
ArgumentsParser, который трактовал удвоенную кавычку внутри кавычек как
"закрыть и снова открыть", схлопывая ее в ничто:
-c "Сообщить(""привет"")" -> -c Сообщить(привет)
Из-за этого на Linux падал тест ТестДолжен_РаботатьСEncoding из
cli-eval.os: дочерний oscript получал код без кавычек и завершался
с ошибкой "Symbol not found".
Теперь удвоенная кавычка внутри кавычек дает литеральную кавычку -
как в правилах разбора командной строки Windows (CommandLineToArgvW),
по которым эта же строка разбирается на Windows.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013YSVPuji9Ge244GRqfawP9
…ed-quotes ArgumentsParser поддерживает экранирование кавычки удвоением
…ны на сырое чтение Событийный API (BeginOutputReadLine) режет вывод на строки и выбрасывает терминаторы, из-за чего обертке приходилось синтезировать разделители заново. Отложенный синтез порождал гонку с конкурентным читателем: если читатель вычерпывал буфер точно по границе строки, разделитель, добавленный перед следующей порцией данных, читался как лишняя пустая строка. Кроме того, вывод, не завершенный переводом строки (например, приглашение ко вводу), застревал внутри .NET до завершения процесса. Теперь фоновая задача перекачивает сырые символы из StandardOutput/StandardError в буфер как есть: - Прочитать() возвращает точную копию вывода процесса, включая переводы строк - без синтеза, без подрезки и без нормализации разделителей; - ПрочитатьСтроку() отдает строку, только когда ее терминатор уже в буфере либо поток закончился: фантомные пустые и рваные строки невозможны по построению, пустая последняя строка и вывод без финального перевода строки не теряются; - ОжидатьЗавершения() без таймаута дожидается выкачивания потоков, сохраняя гарантию "после ожидания виден весь вывод". Тесты process.os проверяют контракт точно: эталоны включают завершающий перевод строки вместо срезания его СокрП. В showversion.os вывод сравнивается с версией через СокрЛП, эталон передается первым аргументом, чтобы метки Ожидали/Получено соответствовали смыслу. Fixes #1726 Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013YSVPuji9Ge244GRqfawP9
- Завершен не сообщает о завершении процесса, пока фоновое чтение не добрало хвост вывода из пайпа: цикл "Пока НЕ Завершен ИЛИ ЕстьДанные" больше не может завершиться раньше, чем вывод станет доступен. - Вычитанный префикс буфера периодически освобождается: вывод долгоживущего процесса не накапливается в памяти при аккуратном читателе. - После Закрыть() пайп продолжает дренироваться до конца потока с отбрасыванием данных: процесс не блокируется на записи в переполненный пайп, как это обеспечивал и событийный API. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013YSVPuji9Ge244GRqfawP9
- ПрочитатьСтроку() при опросе незавершенной строки больше не сканирует накопленный буфер заново: курсор помнит проверенную часть без терминаторов, и каждый символ сканируется один раз. - Решение о приеме или отбрасывании порции данных принимается атомарно с остановкой чтения: после возврата из Dispose данные в буфер гарантированно не попадают. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013YSVPuji9Ge244GRqfawP9
Исправлена гонка в ПрочитатьСтроку() потока вывода процесса
# Conflicts: # Jenkinsfile
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

33 New Issues
0 Fixed Issues
0 Accepted Issues
No data about coverage (0.00% Estimated after merge)
No description provided.