Wydano nową wersję języka programowania Nim, który w tym wrześniu obchodzi swoje pierwsze urodziny od premiery pierwszej stabilnej wersji. W składni przypomina on Pythona, a pod względem wydajności jest niemal jak C++. Wg FAQ język w dużej mierze czerpie z (w kolejności istotności wkładu): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Działa wszędzie dzięki możliwości kompilacji do C/C++/Objective-C/JS. Obsługuje makra, OOP, generyki, wyjątki, gorąca wymiana kodu i wiele więcej. Licencja — MIT.
Najważniejsze zmiany:
-
Pojawił się nowy zbieracz śmieci ORC, wykorzystujący algorytm z ARC, ale w sposób specjalny przetwarzający cykliczne odniesienia. Aktywuje się opcją —gc:orc. O różnicach ARC/ORC jest świetny artykuł.
Dodany został tryb ścisłych definicji funkcji, który włącza dodatkowe sprawdzenie mutowalności obiektów. Aktywuje się przez pragmę {.experimental: "strictFuncs".} lub przez klucz —experimental:strictFuncs.
Słowo kluczowe from można teraz używać jako operator.
Dodana pragma .noalias. Jest ona powiązana ze słowem kluczowym C restrict, aby zwiększyć efektywność, którą może zapewnić to słowo.
Konkretne ostrzeżenia można teraz przekształcić w błędy przez —warningAsError[X]:on|off.
Nowa komenda: nim r main.nim [args…], która kompiluje i uruchamia main.nim, w tym z —usenimcache, aby wynik był zachowywany w $nimcache/main$exeExt, przy użyciu tej samej logiki co nim c -r w celu uniknięcia rekompilacji, gdy źródła się nie zmieniły. Przykład:
nim r compiler/nim.nim —help # skompilowane po raz pierwszy
echo ‘import os; echo getCurrentCompilerExe()’ | nim r — # to również działa
nim r compiler/nim.nim —fullhelp # bez rekompilacji
nim r —nimcache:/tmp main # binarka zapisana w /tmp/main
Dodano nową wskazówkę —hint:msgOrigin, która pokaże, gdzie kompilator wygenerował komunikaty o błędach/ostrzeżeniach. Pomaga to, gdy nie jest oczywiste, skąd pochodzi komunikat.
Dodano flagę —backend:js|c|cpp|objc (lub -b:js itd.) do zmiany backendu.
Dodano flagę —usenimcache do zapisywania binarek w nimcache.
Usunięto klucze: —oldNewlines, —laxStrings, —oldast, —oldgensym
Narzędzie nimsuggest teraz pokazuje nie tylko wstępną deklarację, ale także lokalizację implementacji na żądanie def.
Oprócz tego dodano wiele zmian w standardowej bibliotece i wiele poprawek błędów.
Źródło: linux.org.ru
