Une nouvelle version du langage de programmation système Nim est sortie, qui a célébré son premier anniversaire en septembre dernier depuis la sortie de la première version stable. En termes de syntaxe, le langage est similaire à Python, mais en matière de performance, il se rapproche presque de C++. Selon FAQ le langage emprunte beaucoup à (par ordre d'importance) : Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Il fonctionne partout grâce à la possibilité de compilation en C/C++/Objective-C/JS. Il supporte les macros, la POO, génériques, les exceptions, le rechargement à chaud du code et bien plus encore. Licence — MIT.
Les changements les plus significatifs :
-
Un nouveau ramasse-miettes ORC a été ajouté, utilisant un algorithme d'ARC, mais traitant de manière spéciale les références circulaires. Il s'active avec l'option —gc:orc. Pour plus de détails sur les différences entre ARC/ORC il y a un excellent article.
Un mode de definitions fonctionnelles strictes a été ajouté, qui inclut une vérification supplémentaire sur la mutabilité des objets. Il s'active via la pragma {.experimental: "strictFuncs".} ou la clé —experimental:strictFuncs.
Le mot-clé from peut désormais être utilisé comme un opérateur.
Ajout de la pragma .noalias. Elle est associée au mot-clé C restrict, afin d'améliorer l'efficacité que peut apporter ce mot.
Des avertissements spécifiques peuvent maintenant être transformés en erreurs via —warningAsError[X]:on|off.
Nouvelle commande : nim r main.nim [args…], qui compile et exécute main.nim, et inclut —usenimcache pour que le résultat soit sauvegardé dans $nimcache/main$exeExt, utilisant la même logique que nim c -r pour éviter la recompilation lorsque les sources n'ont pas changé. Exemple :
nim r compiler/nim.nim —help # compilé pour la première fois
echo ‘import os; echo getCurrentCompilerExe()’ | nim r — # cela fonctionne aussi
nim r compiler/nim.nim —fullhelp # sans recompilation
nim r —nimcache:/tmp main # binaire sauvegardé dans /tmp/main
Ajout d'un nouvel indice —hint:msgOrigin, qui montre où le compilateur a généré des messages d'erreur/avertissements. Cela aide lorsque l'origine du message n'est pas évidente.
Ajout d'un drapeau —backend:js|c|cpp|objc (ou -b:js, etc.) pour changer de backend.
Ajout d'un drapeau —usenimcache pour la sortie des binaires dans nimcache.
Suppression des clés : —oldNewlines, —laxStrings, —oldast, —oldgensym
L'outil nimsuggest montre désormais non seulement la déclaration préliminaire, mais aussi l'emplacement de l'implémentation selon la demande def.
En outre, de nombreux changements ont été apportés à la bibliothèque standard et de nombreux bugs ont été corrigés.
Source : linux.org.ru
