Nim (langage)
Nim (anciennement nommé Nimrod) 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, la programmation fonctionnelle, procédurale et orientée objet.
Nim | ||
Date de première version | 2008 | |
---|---|---|
Auteur | Andreas Rumpf | |
Dernière version | 1.6.14 ()[1] | |
Influencé par | Modula-3 (en) Object Pascal Ada C++ Python Lisp Oberon C# |
|
Écrit en | Nim | |
Systèmes d'exploitation | Microsoft Windows, macOS, Linux, FreeBSD, NetBSD | |
Licence | MIT | |
Site web | https://nim-lang.org/ | |
Extension de fichier | nim et nims | |
Initialement, le compilateur Nim était écrit en Pascal. En 2008, une version du compilateur écrite en Nim a été réalisée. Le compilateur est open source et développé par un groupe de volontaires en plus d'Andreas Rumpf. Le compilateur génère un code C optimisé.
Exemples
Les exemples suivants sont valides sur la version 0.10.2 de Nim.
Hello world
echo "Hello World!"
Renverser une chaîne
proc reverse(s: string): string =
result = "" # variable « result » implicite
for i in countdown(high(s), 0):
result.add s[i]
var str1 = "Reverse This!"
echo "Reversed: ", reverse(str1)
Cet exemple présente quelques-unes des caractéristiques de Nim. L'une des plus exotiques est la variable implicite result
: chaque procédure en Nim qui possède un type de retour a une variable de retour nommée result
qui représente la variable qui sera retournée. Dans la boucle for
, la fonction countDown
est un itérateur.
MĂ©taprogrammation
import std/strformat
template genType(TypeName, id: expr, fieldName: expr, fieldType: typedesc) =
type
TypeName = object
id: string
fieldName: fieldType
genType(Personne, nom, age, int)
var personne1 = Personne("Jean", age: 45)
echo fmt("{personne1.nom} a {personne1.age} ans.") # "Jean a 45 ans."
var personne2 = Personne("Rose", age: 46)
echo fmt("{personne2.nom} a {personne2.age} ans.") # "Rose a 46 ans."
C'est un exemple de métaprogrammation en Nim utilisant les modèles (templates). genType
est appelé à la compilation et le type Personne
est créé et défini en tant qu'objet contenant deux champs (un champ nom
, utilisé comme identifiant de type chaîne implicite, et un second champ age
de type dynamique); ce type d'objet est alors utilisé pour déclarer une variable nommée personne1
et y stocker une nouvelle instance de ce type, avant d'en afficher le contenu, et à nouveau pour déclarer une seconde variable.