Nim (langage)
Pour les articles homonymes, voir Nim.
| Nim | ||
| Logo. | ||
| Image illustrative de l’article Nim (langage) | ||
| Date de première version | 2008 | |
|---|---|---|
| Auteur | Andreas Rumpf | |
| Dernière version | 2.2.12 ()[1] Voir et modifier les données sur Wikidata | |
| Influencé par | Modula-3 (en) Object Pascal Ada C++ Python Lisp Oberon C# Voir et modifier les données sur Wikidata |
|
| Écrit en | NimVoir et modifier les données sur Wikidata | |
| Systèmes d'exploitation | Microsoft Windows, macOS, Linux, FreeBSD, NetBSD | |
| Licence | MIT | |
| Site web | https://nim-lang.org/ | |
| Extension de fichier | nim et nimsVoir et modifier les données sur Wikidata | |
| modifier | ||
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.
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
[modifier | modifier le code ]Les exemples suivants sont valides sur la version 0.10.2 de Nim.
echo"Hello World!"
Renverser une chaîne
[modifier | modifier le code ]procreverse(s:string):string= result=""# variable « result » implicite foriincountdown(high(s),0): result.adds[i] varstr1="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
[modifier | modifier le code ]importstd/strformat templategenType(TypeName,id:expr,fieldName:expr,fieldType:typedesc)= type TypeName=object id:string fieldName:fieldType genType(Personne,nom,age,int) varpersonne1=Personne("Jean",age:45) echofmt("{personne1.nom} a {personne1.age} ans.")# "Jean a 45 ans." varpersonne2=Personne("Rose",age:46) echofmt("{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.
Références
[modifier | modifier le code ]- ↑ « Release 2.2.12 », (consulté le )