Вышла новая версия системного языка программирования 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
. Она сопоставляется с ключевым словом Crestrict
, чтобы повысить эффективность, которую может обеспечить это слово. -
Конкретные предупреждения теперь можно превратить в ошибки через
--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
.
Помимо этого добавлено множество изменений в стандартную библиотеку и множество исправлений багов.
>>> Подробности