Nim est un langage doté d’un système de typage statique et d’un style impératif. Bien que le langage soit multiparadigme : il mélange métaprogrammation, fonctionnel, passage de messages, procédural et orienté objet, avec un ramasse-miettes. Il ne dispose pas d’un compilateur, mais d’un transcompilateur qui produit du code C, C++ ou Objective-C en sortie… ou encore en JavaScript, ce qui facilite l’intégration avec l’environnement extérieur. En définissant ses propres types, le programmeur fait travailler le compilateur à sa place. C'est ce qui rend le typage statique puissant et utile.
Définition des types
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | type Name = string # Un alias de type donne un nouveau type qui est interchangeable. Age = int # avec l'ancien type mais est plus descriptif. Person = tuple[name: Name, age: Age] # Définir également les structures de données. AnotherSyntax = tuple fieldOne: string secondField: int var john: Person = (name: "John B.", age: 17) newage: int = 18 # Il serait préférable d'utiliser Age plutôt que int john.age = newage # Mais cela fonctionne toujours car int et Age sont synonymes. type Cash = distinct int # `distinct` rend un nouveau type incompatible avec son Desc = distinct string # type de base. |
Nim a fait sa première entrée dans l'index TIOBE en 2017 à la position 129, l'année dernière, il est entré dans le top-100, et il a réussi à se hisser dans le top-50 pendant 2 mois. « Nim est un langage de programmation système pratique et compilé offrant des performances et une syntaxe de type Python, une flexibilité de type Lisp, et une métaprogrammation de premier ordre », a déclaré l’équipe de développement de Nim.
La version 1.6.2 de Nim permet par exemple de Convertir des variables statiques en openArray. Lorsqu'on assignait une sortie constante à un seq, et qu'on passait ensuite ce seq statique à d'autres fonctions qui prennent openArray, le compilateur pouvait produire des erreurs, car il ne savait pas comment convertir static[seq[T]] en openArray[T]. En ignorant le wrapper statique sur le type pour déterminer l'emplacement et la longueur de la mémoire des données, ce problème est résolu proprement. Malheureusement, il est relativement difficile de proposer un exemple minimal, car il existe des problèmes consécutifs à l'échec de la conversion. Par exemple, cela peut conduire à une erreur interne : type d'environnement inconsistant, au lieu de l'erreur openArrayLoc pertinente.
Nim offre au programmeur une grande puissance sans compromis sur l'efficacité d'exécution. Pour certains observateurs, Nim est tout ce que Python et Go devraient être ou veulent être, en ce qui concerne les caractéristiques du langage et la sémantique. « Il a des propriétés faciles à apprendre et un meilleur système de type, le système générique et les macros sont sans doute plus utiles, et plus utilisables que ce qui est offert par les autres langages. Il mérite beaucoup plus d'attention qu'il n'en reçoit actuellement », déclare un internaute.
Source : Nim
Et vous ?
Que pensez-vous du langage Nim ?
Quel est votre avis sur les améliorations apportées à ce langage ?
Êtes-vous d'avis que le langage mérite beaucoup plus d'attention qu'il n'en reçoit actuellement ?
Voir aussi :
La version 1.6 de Nim, le langage doté d'un transcompilateur vers C, C++ est disponible, avec une reconstruction du compilateur en 12s alors que Rust fait 15min, gcc : 30min+ et Go : 90s
La première version finale de Nim, le langage doté d'un transcompilateur vers C, C++, JavaScript est disponible, avec des ajouts
La version 1.4.0 du langage de programmation Nim est disponible avec les fonctions strictes, ainsi que plusieurs ajouts et modifications dans la bibliothèque standard
Python et C++ sont les langages qui ont connu la plus forte croissance de popularité sur l'année 2020, selon les statistiques de l'index TIOBE