Вышла новая версия системного языка программирования Nim, которому в этом сентябре исполнился год с момента выхода [ первой стабильной версии ](
https://www.linux.org.ru/news/development/15245585 ) . По синтаксису язык похож на Python, а по производительности почти как C++. Согласно [ FAQ ](
https://nim-lang.org/faq.html ) язык во многом заимствует из (в порядке весомости вклада): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon. Работает везде благодаря возможности компиляции в С/C++/Objective-C/JS. В нём поддерживаются [ макросы ](
https://nim-lang.org/docs/manual.html#macros ) , [ ООП ](
https://nim-lang.org/docs/tut2.html#object-oriented-programming ) , [ дженерики ](
https://nim-lang.org/docs/tut2.html#generics ) , [ исключения ](
https://nim-lang.org/docs/tut2.html#exceptions ) , [ горячая замена кода ](
https://nim-lang.org/docs/hcr.html ) и многое другое. Лицензия - MIT. Наиболее значительные изменения: Появился новый сборщик мусора ORC, использующий алгоритм из ARC, но при этом специальным образом обрабатывающий циклические ссылки. Включается опцией --gc:orc. О различиях ARC/ORC [ есть отличная статья ](
https://habr.com/ru/post/523674/ ) . Добавлен режим строгих определений функций, при котором включается дополнительная проверка на мутабельность объектов. Активируется через прагму {.experimental: "strictFuncs".} или через ключ --experimental:strictFuncs. Ключевое слово from теперь может быть использовано как оператор. Добавлена прагма .noalias. Она сопоставляется с ключевым словом C restrict, чтобы повысить эффективность, которую может обеспечить это слово. Конкретные предупреждения теперь можно превратить в ошибки через --warningAsError[X]:on|off. Новая команда: nim r main.nim [args...], которая компилирует и запускает main.nim, и включает --usenimcache так, что результат сохраняется в $nimcache/main$exeExt, используя ту же логику что и nim c -r для избавления от перекомпиляции, когда исходники не изменились. Пример: nim r compiler/nim.nim --help # скомпилирован в первый раз echo 'import os; echo getCurrentCompilerExe()' | nim r - # это тоже работает nim r compiler/nim.nim --fullhelp # без перекомпиляции nim r --nimcache:/tmp main # бинарник сохранён в /tmp/main Добавлена новая подсказка --hint:msgOrigin, которая покажет где компилятор сгенерировал сообщения об ошибках/предупреждения. Это помогает, когда неочевидно откуда пришло сообщение. Добавлен флаг --backend:js|c|cpp|objc (или -b:js и т.д.) для смены бэкенда. Добавлен флаг --usenimcache для вывода бинарников в nimcache. Удалены ключи: --oldNewlines, --laxStrings, --oldast, --oldgensym Утилита nimsuggest теперь показывает не только предварительное объявление, но и расположение реализации по запросу def. Помимо этого добавлено множество изменений в стандартную библиотеку и множество исправлений багов.
Ссылка:
https://www.linux.org.ru/news/development/15954313