- Clojure
-
Clojure
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.
Sommaire
Philosophie
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
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.
Macros
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
- 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
"Bonjour le monde" :
(println "Bonjour, le monde!")
"Bonjour, le monde" dans une interface graphique Swing :
(javax.swing.JOptionPane/showMessageDialog nil "Bonjour, le monde!")
Lien externe
References
- On State and Identity, Rich Hickey, clojure.org. Consulté le 2010-03-01
Wikimedia Foundation. 2010.