Nim (langage)

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Page d'aide sur l'homonymie Pour les articles homonymes, voir Nim.

Nim
Date de première version 2008
Auteur Andreas Rumpf
Dernière version 0.16.0[1]Voir et modifier les données sur Wikidata
Influencé par Modula-3 (en)
Embarcadero Delphi
Ada
C++
Python
Lisp
Oberon
C♯
GoVoir et modifier les données sur Wikidata
Systèmes d'exploitation Windows, macOS, Linux, FreeBSD, NetBSD
Licence MIT
Site web https://nim-lang.org/
Extension de fichier nimVoir et modifier les données sur Wikidata

Nim (anciennement nommé Nimrod) est un langage de programmation impératif, mutli-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.

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.

Hello world[modifier | modifier le code]

echo "Hello World!"

Renverser une chaîne[modifier | modifier le code]

 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 et 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]

template genType(name, fieldname: expr, fieldtype: typedesc) =
  type
    name = object
      fieldname: fieldtype

genType(Test, foo, int)

var x = Test(foo: 4566)
echo(x.foo) # 4566

C'est un exemple de métaprogrammation en Nim utilisant les templates. genType est appelé à la compilation et le type Test est créé.