Sortie du langage de programmation Nim 1.4.0

Une nouvelle version du langage de programmation du système Nim a été publiée et a célébré son premier anniversaire en septembre. première version stable. Le langage est similaire en syntaxe à Python et presque similaire au C++ en termes de performances. Selon QFP Le langage emprunte beaucoup (par ordre de contribution) : Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.


Fonctionne partout grâce à la possibilité de compiler en C/C++/Objective-C/JS. Elle supporte macro, POO, génériques, exceptions, échange de code à chaud et beaucoup plus. Licence : MIT.

Les changements les plus significatifs :

  • Il existe un nouveau garbage collector ORC qui utilise l'algorithme d'ARC, mais gère en même temps les références circulaires d'une manière particulière. Activé par l'option -gc:orc. À propos des différences ARC/ORC il y a un super article.

  • Un mode pour les définitions de fonctions strictes a été ajouté, ce qui permet une vérification supplémentaire de la mutabilité des objets. Activé via le pragma {.experimental: "strictFuncs".} ou via la clé --experimental:strictFuncs.

  • Le mot-clé from peut désormais être utilisé comme opérateur.

  • Ajout du pragma .noalias. Il correspond au mot-clé C restrict pour augmenter l’efficacité que le mot-clé peut fournir.

  • Des avertissements spécifiques peuvent désormais ê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 stocké dans $nimcache/main$exeExt, en utilisant la même logique que nim c - r à supprimer de la recompilation lorsque les sources n'ont pas changé. Exemple:

nim r compiler/nim.nim --help # compilé pour la première fois
echo 'importer le système d'exploitation; echo getCurrentCompilerExe()' | nim r - # ça marche aussi
nim r compiler/nim.nim --fullhelp # sans recompilation
nim r —nimcache:/tmp main # binaire enregistré dans /tmp/main

  • Ajout d'un nouvel indice -hint:msgOrigin, qui indiquera où le compilateur a généré des messages d'erreur/d'avertissement. Cela est utile lorsqu'il n'est pas évident d'où vient le message.

  • Ajout de l'indicateur —backend:js|c|cpp|objc (ou -b:js, etc.) pour changer le backend.

  • Ajout de l'indicateur --usenimcache pour afficher les binaires vers nimcache.

  • Clés supprimées : --oldNewlines, --laxStrings, --oldast, --oldgensym

  • L'utilitaire nimsuggest affiche désormais non seulement la pré-déclaration, mais également l'emplacement d'implémentation d'une requête def.

De plus, de nombreuses modifications ont été ajoutées à la bibliothèque standard et de nombreuses corrections de bugs.

Source: linux.org.ru