Nim — статически типизированный компилируемый язык программирования. Его синтаксис вдохновлён Python, а возможности метапрограммирования — Lisp. Язык транслируется в C, C++ и JavaScript, сочетая производительность C с выразительностью высокоуровневых языков. Распространяется под лицензией MIT. Подписывайтесь на Telegram-канал про технологии
Ключевые возможности: макросы на уровне 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 странице проекта.
Источник: trashbox.ru