Излезе новата версия на системния език за програмиране Nim, който този септември навършва една година от излизането си на първата стабилна версия. Синтаксисът на езика е подобен на Python, а по производителност е почти като C++. Според Често задавани въпроси езикът до голяма степен заимства от (в реда на значимост на приноса): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Работи навсякъде благодарение на възможността за компилация в C/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
