Рэліз мовы праграмавання Nim 1.4.0

Выйшла новая версія сістэмнай мовы праграмавання Nim, якой у гэтым верасні споўніўся год з моманту выхаду першай стабільнай версіі. Па сінтаксісе мова падобная да Python, а па прадукцыйнасці амаль як C++. Згодна Часта задаваныя пытанні мова шмат у чым запазычае з (у парадку важкасці ўкладу): 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