Доступен выпуск Nim 2.2.8 — языка системного программирования
Версия 2.2.8 включает 89 исправлений и изменений, среди которых повышенная стабильность стандартного аллокатора памяти в многопоточных сценариях.
Обложка: Freepik
Nim — статически типизированный компилируемый язык программирования. Его синтаксис вдохновлён Python, а возможности метапрограммирования — Lisp. Язык транслируется в C, C++ и JavaScript, сочетая производительность C с выразительностью высокоуровневых языков. Распространяется под лицензией MIT.
Ключевые возможности:
- макросы на уровне AST (во время компиляции);
- обобщённое программирование с концептами;
- множественная диспетчеризация (multiple dispatch);
- детерминированное управление памятью (стратегии ARC/ORC, refc, сборка мусора);
- встроенная поддержка async/await;
- FFI для интеграции с C/C++/JavaScript.
Главное улучшение версии 2.2.8 — повышенная стабильность стандартного аллокатора памяти в многопоточных сценариях. Разработчики отмечают, что необходимость в использовании флага -d:useMalloc для многопоточного кода устранена.
Среди исправленных ошибок:
- SIGBUS при итерации по константной таблице из-за преждевременного уничтожения временных объектов;
- SIGSEGV с замыкающими итераторами;
- некорректная генерация C-кода при инициализации .global внутри метода;
- ошибка в обработке finally в замыкающем итераторе при наличии try..except;
- некорректное name mangling в стиле C++ при использовании --debuginfo;
- медленная работа setLen при уменьшении размера последовательности из-за излишней зачистки памяти;
- отсутствие setLenUninit для режима "--mm:refc";
- зависание обработки term rewriting на больших файлах;
- SIGSEGV при использовании distinct-типов с назначением в heap-объекты в режиме refc;
- некорректный доступ к m_type в хуках для обобщённых distinct-типов под ARC/ORC/ATOMICARC;
- сбой компилятора при передаче кортежа с «items» из концепта;
- рекурсивные концепты вызывали segfault компилятора;
- некорректная генерация HTTPS-запросов через HTTP-прокси в httpclient;
- неопределённое поведение при операции shl;
- усечение длинных целочисленных литералов без предупреждения;
- сбои компилятора при ряде некорректных обобщённых инстанциаций;
- добавлен режим --styleCheck:warn.
Список всех изменений доступен на GitHub странице проекта.
Комментариев пока нет
Оставьте комментарий...