Вышла новая версия системного языка программирования Nim, которому в этом сентябре исполнился год с момента выхода первой стабильной версии. По синтаксису язык похож на Python, а по производительности почти как C++. Согласно FAQ язык во многом заимствует из (в порядке весомости вклада): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Работает везде благодаря возможности компиляции в С/C++/Objective-C/JS. В нём поддерживаются макросы, ООП, дженерики, исключения, горячая замена кода и многое другое. Лицензия — MIT.
Наиболее значительные изменения:
-
Появился новый сборщик мусора ORC, использующий алгоритм из ARC, но при этом специальным образом обрабатывающий циклические ссылки. Включается опцией —gc:orc. О различиях ARC/ORC есть отличная статья.
-
Добавлен режим строгих определений функций, при котором включается дополнительная проверка на мутабельность объектов. Активируется через прагму {.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.
Помимо этого добавлено множество изменений в стандартную библиотеку и множество исправлений багов.
Источник: linux.org.ru