• Licence Eclipse • Développement open sur Github https://github.com/clojure/clojure • Lead designer: Rich Hickey • Cible la JVM (clj) et JS (cljs) • Un seul Jar pour commencer: java -cp clojure-${VERSION}.jar clojure.main
different reason: the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.“ Eric Raymond “How to Become a Hacker”
to misuse a computer". I think that description a great compliment because it transmits the full flavour of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.” Edsger W. Dijkstra
la mémoire Garbage collection Effets de bord Fonctions pures Partage de données Passage de message Données immutables Concurrence / verrous Software Transactional Memory Passage de message Verrouillage offline, … Composabilité Fonctions de haut niveau Limitations des langages ex-même Macros DSLs, Design patterns … mais quelles solutions ?
de valeurs homogènes ou hétérogènes • Appliquer une fonction à une liste ne la modifie pas, mais renvoie une nouvelle copie de la liste originelle • L’immutabilité des structures de données est une fondation de Clojure • Deux opérateurs fondamentaux pour travailler les listes: first, rest • Toutes les structures de données et fonctions en LISP peuvent être construites par la composition de ces deux opérateurs...
Sequential Processes) avec la lib core.async • Permet des patterns équivalents aux go routines de GO • Disponibles sur la JVM et Javascript • Evite le “callback hell”