È stata rilasciata una nuova versione del linguaggio di programmazione di sistema Nim, che in questo settembre compie un anno dalla sua uscita della prima versione stabile. Per sintassi, il linguaggio è simile a Python, mentre per prestazioni è quasi come C++. Secondo FAQ il linguaggio attinge a molte influenze (in ordine di importanza): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Funziona ovunque grazie alla possibilità di essere compilato in C/C++/Objective-C/JS. Supporta macro, OOP, generics, eccezioni, hot code swapping e molto altro. Licenza — MIT.
Le modifiche più significative:
-
È stato introdotto un nuovo garbage collector ORC, che utilizza un algoritmo simile a ARC, ma gestisce in modo speciale i collegamenti circolari. Si attiva con l'opzione —gc:orc. Sugli aspetti distintivi di ARC/ORC c'è un ottimo articolo.
Aggiunto un modo per definizioni di funzioni rigorose, che attiva un controllo aggiuntivo sulla mutabilità degli oggetti. Si attiva tramite la pragma {.experimental: "strictFuncs".} o con la chiave —experimental:strictFuncs.
La parola chiave from può ora essere utilizzata come operatore.
È stata aggiunta la pragma .noalias. Essa corrisponde alla parola chiave C restrict, per aumentare l'efficienza che può garantire.
Avvisi specifici ora possono essere trasformati in errori tramite —warningAsError[X]:on|off.
Nuovo comando: nim r main.nim [args…], che compila e avvia main.nim, e include —usenimcache così che il risultato venga salvato in $nimcache/main$exeExt, utilizzando la stessa logica di nim c -r per eliminare la ricompilazione se i sorgenti non sono cambiati. Esempio:
nim r compiler/nim.nim —help # compilato per la prima volta
echo ‘import os; echo getCurrentCompilerExe()’ | nim r — # anche questo funziona
nim r compiler/nim.nim —fullhelp # senza ricompilazione
nim r —nimcache:/tmp main # binario salvato in /tmp/main
Aggiunto un nuovo suggerimento —hint:msgOrigin, che mostrerà dove il compilatore ha generato messaggi di errore/avviso. Questo aiuta quando non è chiaro da dove provenga il messaggio.
Aggiunto il flag —backend:js|c|cpp|objc (o -b:js ecc.) per cambiare il backend.
Aggiunto il flag —usenimcache per esportare i binari in nimcache.
Rimossi i flag: —oldNewlines, —laxStrings, —oldast, —oldgensym
L'utility nimsuggest ora mostra non solo la dichiarazione preliminare, ma anche la posizione dell'implementazione su richiesta def.
Inoltre, sono state aggiunte numerose modifiche alla libreria standard e molte correzioni di bug.
Fonte: linux.org.ru
