Einführung

Gesamtübersicht: Einführung


Was ist Clojure?

Clojure ist eine Programmiersprache, die Ideen aus vielen Sprachen, wie Lisp, ML, Haskell und anderen zusammenfasst. Es ist ein Lisp für die Java Virtual Machine (JVM), welches in einem Open-Source Projekt unter der Leitung von Rich Hickey seit 2006 entwickelt wird. Die erste stabile Version 1.0 wurde im Mai 2009 veröffentlicht.

Als Merkmale der Sprache werden die folgenden auf der Internetseite angegeben:

Neben Clojure gibt es noch das Clojure-Contrib Projekt, in welchem weitere Funktionen zu diversen Einsatzgebieten entwickelt werden. Einiges aus Clojure-Contrib wurde nach der Freigabe der Version 1.0 bereits in Clojure übernommen (z.B. das Test-Is Testframework).


Motivation

Rich Hickey ist ein Common Lisp Nutzer, welcher als freier Entwickler häufig im Unternehmensumfeld Java einsetzen muss, da entsprechende Infrastruktur bereit steht, sowie vorhandene Programmbibliotheken weiter genutzt werden sollen.

Vor der Schaffung von Clojure hatte Rich Hickey bereits zwei verschiedene Common Lisp, Java Bridges entwickelt. Besonders in nebenläufigen Szenarien muss sichergestellt werden, dass sich Daten niemals ändern. Dies wird von Common Lisp grundsätzlich auch eingehalten. Es gibt jedoch Stellen, an denen Änderungen dennoch möglich sind. Rich Hickey ist der Meinung, dass es nicht ausreichend ist, wenn Entwickler sich absprechen keine destruktiven Funktionen zu nutzen, sondern die Sprache muss dies sicherstellen.

Auf der anderen Seite ist er aber auch davon überzeugt, dass sich nicht jedes Problem in eine mathematische Funktion überführen lässt, weshalb Programme einen inneren Zustand benötigen. Ein rein funktionaler Ansatz schließt dies jedoch aus. Es wurde ein Ref-System hinzugenommen, welches koordinierte Zustandsübergänge sicherstellt.

Diese Mischung hätte nicht in Common Lisp integriert werden können, weshalb die neue Sprache geschaffen wurde. Dabei wurden einige Namen mit neuen Bedeutungen versehen, weshalb alter Programmcode nicht direkt verwendet werden kann. Clojure strebt bewusst keine Abwärtskompatibilität an.