Вышел Nim 2.4.0: строки SSO, инкрементальная сборка и новый режим памяти YRC

Вышел Nim 2.4.0: строки SSO, инкрементальная сборка и новый режим памяти YRC
Содержание статьи

28 октября команда Nim выпустила стабильную версию 2.4.0. Среди главных изменений: новый режим строк, параллельная инкрементальная сборка и YRC для работы с циклическими ссылками между потоками. На Mentoring.digital разбираем, какие возможности стоит оценивать отдельно при обновлении проекта.

Новые режимы включаются отдельными флагами

Опция --strings:sso включает оптимизацию коротких строк. Для эффективной работы с ней предложен низкоуровневый API, который разделяет чтение и запись. Авторы отдельно предупреждают: переход не гарантирует ускорения любого кода. Обновлять все обращения к строкам только ради установки версии 2.4.0 не требуется.

Флаг --ic:on включает параллельные инкрементальные пересборки на основе нескольких процессов. Макросы, использующие глобальные переменные времени компиляции, могут потребовать адаптации. Опция --mm:yrc добавляет режим управления памятью, способный обрабатывать циклы ссылок, пересекающие границы потоков.

Более удобные типы и сохранение прежних конструкций

В Nim 2.4.0 появился более краткий синтаксис sum types, типов с несколькими вариантами, и доступ к их полям через сопоставление с образцом. Прежние case objects продолжают работать и не объявлены устаревшими. Для проектов, которые пока остаются на ветке 2.2, в тот же день выпущена версия 2.2.14 с исправлениями.

Как оценивать переход без лишних выводов

Начните с обычной сборки и тестов на новой версии, сохранив исходные параметры. Затем меняйте по одному режиму. Для строк полезны сценарии изменения буфера и передачи данных во внешнюю библиотеку; для сборки сравнивайте одинаковое изменение одного файла; для памяти проверяйте именно тот многопоточный сценарий, который есть в вашем приложении.

Замер времени имеет смысл только при одинаковой машине, исходниках и условиях запуска. Отдельно учитывайте потребление памяти и корректность результата. Одного быстрого запуска недостаточно, чтобы объявить новый режим лучшим для всего проекта.

Если вы сопоставляете модели владения и время жизни данных в разных языках, практику с указателями и управлением памятью можно разобрать с наставником по C++. Это смежная подготовка; особенности конкретного режима Nim нужно сверять с его документацией и поведением своего кода.

Похожие статьи по данной теме