Возможности Nim включают систему макросов, работающих на AST во время компиляции, поддержку обобщённого программирования с концептами, множественную диспетчеризацию (multiple dispatch), детерминированное управление памятью с поддержкой нескольких стратегий (ARC/ORC, refc, маркировка-и-подметание), встроенную поддержку async/await для асинхронного программирования и FFI для простой интеграции с C/C++/JavaScript. Nim позиционируется как системный язык, подходящий для разработки от встраиваемых систем до веб-серверов, с акцентом на эффективность, безопасность памяти и удобство разработки.
Выпуск включает 142 коммита, устраняющих ошибки в компиляторе и стандартной библиотеке. Среди исправлений:
- Устранены несколько аварийных завершений (SIGSEGV) в ARC/ORC, связанных с повторным использованием шаблонов «{.dirty.}» и выделением памяти под «seq», а также возникавших при обращении к элементам объектов «case» после «move» в связке с «GC_fullCollect()» при использовании «refc».
- Исправлена ошибка самоприсваивания при копировании памяти (self-append) в runtime «refc», приводившая к аварийному завершению на OpenBSD.
- Устранена регрессия, из-за которой флаг «—panics:on» пропускал проверку «nimErr_» после вызова замыкания, что приводило к ложному срабатыванию проверки «OverflowDefect».
- Исправлена некорректная семантика «deepCopy» для не копируемых (non-copyable) типов и двойной вызов деструктора при использовании прагмы «{.cursor.}».
- Устранена ошибка кодогенерации для C++, приводившая к внутренней ошибке компилятора (ICE) при вызове конструктора «bindSym» внутри макроса.
- Исправлено некорректное поведение «compareExchange», применявшего недопустимую семантику «release» при неудачном исходе операции.
- Устранена ошибка в «std/encodings», при которой метод «encodings.convert» незаметно повреждал данные для сохраняющих кодировок типа ISO-2022-JP при увеличении выходного буфера.
- Исправлена регрессия в JS-бэкенде, из-за которой некорректно генерировался файл «dockhack.js».
- Устранена ошибка, при которой итерация по элементам массива (в отличие от «seq») всегда выполняла их копирование.
- Исправлена регрессия производительности при переходе с «refc» на ORC либо при использовании флагов «—mm:refc —exceptions:goto», связанная с избыточными проверками defect-исключений.
Источник: http://www.opennet.ru/opennews/art.shtml?num=66237
