Rappelons que c'est un langage de programmation qui combine des concepts réussis de langages comme Python, Ada et Modula. C'est un langage de programmation impératif, multi-paradigme et compilé imaginé et développé par Andreas Rumpf. Il est prévu pour être efficace, expressif et élégant. Il supporte la métaprogrammation, le fonctionnel, le procédural et l'orienté-objet. Selon son site web, Nim génère des exécutables natifs sans dépendance, qui ne dépendent pas d'une machine virtuelle, qui sont légers et permettent une redistribution facile. Le compilateur Nim et les exécutables générés prennent en charge toutes les principales plates-formes telles que Windows, Linux, BSD et macOS.
Utilisation de plusieurs versions de Nim
L'équipe recommande à tous les utilisateurs du langage de mettre à niveau et d'utiliser la version 1.2. Il faut noter qu'il est néanmoins possible d'utiliser plusieurs versions de Nim. Si vous souhaitez effectuer une mise à niveau vers la version v1.2, mais que vous comptez sur le comportement de la v1.0, il existe un commutateur de ligne de commande --useVersion, que vous pouvez utiliser avec la dernière version de Nim pour simuler les versions précédentes.
Par exemple, Nim v1.2 est plus strict sur les conversions de types concernant les types de proc. Si cela casse votre code, passez --useVersion:1.0, qui émulera l'ancien comportement. Et ce n'est pas tout. Si vous comptiez sur une fonctionnalité donnée ou un bogue qui est maintenant corrigé, vous pouvez essayer --useVersion:1.0.
when declared
Si vous êtes l'auteur d'une bibliothèque et que vous souhaitez que votre bibliothèque soit disponible à la fois pour les utilisateurs v1.0 et v1.2, mais que vous comptez sur certaines nouvelles fonctionnalités introduites dans la v1.2 qui ne sont pas disponibles dans la version v1.0, vous pouvez alors utiliser when declared. Le module sequtils a maintenant le unzipproc. Il est désormais possible d'écrire votre code comme ceci :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import sequtils when not declared(unzip): proc unzip*[S, T](s: openArray[(S, T)]): (seq[S], seq[T]) = result[0] = newSeq[S](s.len) result[1] = newSeq[T](s.len) for i in 0..<s.len: result[0][i] = s[i][0] result[1][i] = s[i][1] let a = @[('a', 1), ('b', 2), ('c', 3)] let b = unzip(a) # version 1.0 will use the proc declared above # version 1.2 will use sequtils' proc assert b == (@['a', 'b', 'c'], @[1, 2, 3]) |
GC:ARC
L'équipe de développement du langage fait remarquer que --gc:arc est la principale nouveauté pour cette version. Il présente de nombreux avantages par rapport aux autres algorithmes GC plus classiques fournis avec Nim 1.0 :
- indépendamment de la taille du tas, il fonctionne bien avec des tas minuscules et plus grands ;
- indépendamment de la taille de la pile, les grands tableaux sur la pile ne provoquent pas de ralentissements ;
- il offre un tas partagé, activé via [c]--threads:on[/U] ;
- il n'y a plus d'exigences setupForeignGC ;
- il fonctionne mieux avec le rechargement de code à chaud et les DLL.
- il fonctionne mieux avec des fibres, des coroutines et autres ;
- il fonctionne avec webassembly et Emscripten.
Les macros
La version 1.2.0 introduit plusieurs nouvelles macros qui devraient aider à écrire certaines tâches courantes. Par exemple, dup est une macro qui transforme une fonction in-place en une fonction qui renvoie un résultat sans modifier son entrée. L'idée est que les versions futures de Nim offriront uniquement les versions in-place des fonctions (donc plus de sort et sorted, rotateLeft et rotatedLeft, etc.), ce qui pourrait être transformé en fonctions renvoyant une copie par l'intermédiaire de dup.
Source : Nim
Et vous ?
Qu'en pensez-vous ?
Voir aussi
La première version finale de Nim, le langage doté d'un transcompilateur vers C, C++, JavaScript est disponible avec des ajouts
Nim 0.12 : un langage multiparadigme rapide qui s'approche de sa première version finale avec l'inclusion d'une machine virtuelle
Quel avenir pour le langage C ? Un développeur expérimenté fait ses adieux au langage et livre ses inquiétudes quant à son avenir
C2 : un langage qui se présente comme une évolution de C, plus rapide, sans fichiers d'en-tête, avec système de build intégré et d'autres changements
Quel langage pourrait remplacer C ? Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D