Clojure

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Clojure
Logo.

Apparu en 2007
Auteur Rich Hickey
Développeurs Rich Hickey
Paradigmes fonctionnel, multi-paradigme
Typage fort, dynamique
Influencé par Lisp, ML, Haskell, Erlang
Système d'exploitation Multiplate-forme
Licence Eclipse Public License
Site web http://clojure.org

Clojure est un langage de programmation fonctionnel. C'est un dialecte de Lisp.

Philosophie[modifier | modifier le code]

Rich Hickey a développé Clojure parce qu'il voulait un Lisp moderne pour la programmation fonctionnelle, en symbiose avec la plateforme Java, et expressément orienté vers la programmation concurrente.

L'approche concurrentielle de Clojure est caractérisée par le concept d'identité[1], qui représente une série d'états immuables dans le temps. Comme les états sont des valeurs fixes, un nombre indéfini d'agents peut y accéder en parallèle, et la concurrence se résume alors à gérer les changements d'un état à un autre. Dans cette optique, Clojure propose plusieurs types de références mutables, chacun d'eux ayant une sémantique bien définie pour la transition inter-état.

Syntaxe[modifier | modifier le code]

Comme n'importe quel autre Lisp, la syntaxe de Clojure est basée sur les S-expressions. Ces dernières sont d'abord parsées en structures de données par un reader, avant d'être compilées. Clojure est un Lisp-1, et n'a pas pour objectif d'être compatible avec d'autres dialectes de Lisp.

Contrairement à d'autres Lisp, Clojure permet la représentation directe des structures suivantes : vecteurs, tables de hachage, sets. Ce qui rend aussi naturelle l'utilisation de ces structures en Clojure que les listes dans les autres Lisp.

Macros[modifier | modifier le code]

Le système de macro de Clojure est semblable à celui que propose Common Lisp, exception faite de l'apostrophe inversée (backquote), appelée "apostrophe de syntaxe" (syntax quote) qui associe un symbole à son espace de nommage (namespace).

Caractéristiques du langage[modifier | modifier le code]

  • Développement dynamique à l'aide du REPL
  • Les fonctions sont des objets. La programmation par récursion est favorisée, plutôt que la programmation par boucle à effets de bord.
  • Séquences évaluées paresseusement
  • Grande variété de structures de données non mutables et persistantes
  • programmation concurrente grâce à la STM, à un système d'agents, et à un système de variables dynamiques
  • Intégration au langage Java : en compilant en code binaire pour la JVM, les applications en Clojure sont préparées et déployées dans la JVM ou un serveur d'application sans difficulté supplémentaire. Le langage fournit aussi des macros qui facilitent l'usage des API Java existante. Les structures de données de Clojure implémentent toutes des interfaces Java standardisées, rendant aisée l'exécution de code écrit en Clojure depuis Java.

Exemples[modifier | modifier le code]

"Bonjour, le monde!" :

(println "Bonjour, le monde!")

"Bonjour, le monde" dans une interface graphique Swing :

(javax.swing.JOptionPane/showMessageDialog nil "Bonjour, le monde!")

Notes et références[modifier | modifier le code]

  1. (en) « On State and Identity », Rich Hickey, clojure.org (consulté en 2010-03-01)

Lien externe[modifier | modifier le code]