Skip to content

Выпуск 2.2.0 - #1733

Merged
EvilBeaver merged 91 commits into
release/latestfrom
publish/2.2.0
Sep 5, 2026
Merged

Выпуск 2.2.0#1733
EvilBeaver merged 91 commits into
release/latestfrom
publish/2.2.0

Conversation

@EvilBeaver

Copy link
Copy Markdown
Owner

No description provided.

Bayselonarrend and others added 30 commits May 27, 2026 21:24
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
nixel2007 and others added 27 commits August 27, 2026 17:04
По замечаниям мэйнтейнера в 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
@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 8164f2ac-3c60-4b5f-acda-5758dd3c660e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonar-openbsl-ru-qa-bot

Copy link
Copy Markdown

@EvilBeaver
EvilBeaver merged commit 65f84cc into release/latest Sep 5, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants