| Clojure |
|---|
 |
| Basisdaten |
|---|
| Paradigmen: | Funktionale Programmiersprache |
| Erscheinungsjahr: | 2007 |
| Entwickler: | Rich Hickey |
| Aktuelle Version: | 1.12.4[1] (10. Dezember 2025) |
| Typisierung: | dynamisch,stark |
| Beeinflusst von: | Lisp,Prolog,ML,Erlang,Haskell,Java[2] |
| Betriebssystem: | Windows,Linux,macOS,Solaris,FreeBSD |
| Lizenz: | Eclipse Public License |
| clojure.org |
Clojure [ˈkləʊʒə(r)] ist ein modernerLisp-Dialekt, der interaktive Entwicklung unterstützt. Die Sprache fördert einenfunktionalen Stil, dernebenläufige Programmierung stark vereinfacht. Clojure läuft in derJava Virtual Machine und ist eng mit derJava Runtime integriert. EineJavaScript-Implementierung mit dem Namen ClojureScript sowie eineCLR-Implementierung existieren ebenso. DasMakrosystem ist mit dem anderer Lisp-Umgebungen vergleichbar, unterstützt jedoch (anders als etwaCommon Lisp) keine Reader-Macros[3].
Gängige Hilfsmittel zur Paketverwaltung und zur Kompilierung von Clojure-Programmen sind tools.build,Leiningen oderBoot.[4]
VollständigeHallo-Welt-Programme:
textuell im Lisp-Stil:
grafisch mit Hilfe der Java-BibliothekSwing:
(javax.swing.JOptionPane/showMessageDialognil"Hallo Welt!")
Die Fakultäts-Funktion als Beispiel für Rekursion in Clojure:
(defnfactorial[n]"tail recursive version of n!"(loop[curn,acc1](if(<=cur1)acc(recur(deccur)(*'curacc)))))
Die Fakultäts-Funktion durch Verwendung von Funktionen höherer Ordnung:
(defnfac[n](reduce*'(range1(incn))))
- Funktionale Sprache mit einer Lisp-Syntax.
- Dynamische, interaktive Entwicklung in der REPL (Read-eval-print loop).
- Neben der inLisp klassischen Liste unterstützt die Syntax Vektoren,assoziative Arrays und Mengen.
- Die Abstraktion der Folge (sequence) erlaubt es, alle diese Datenstrukturen uniform mit denselben Funktionen zu verwenden. Folgen werden typischerweise verzögert (lazy) ausgewertet.
- Alle Datenstrukturen sind Werte (immutable).
- Zustandsbehaftete Daten werden in Clojure durch spezielle Typen realisiert (atoms undrefs). Der konkurrierende Zugriff auf Variablen mit veränderlichen Werten wird mittels STM (software transactional memory) durch das Laufzeitsystem der Sprache synchronisiert. Die Konzepte entsprechen derMultiversion Concurrency Control, wie sie inDatenbankmanagementsystemen verwendet werden (exakt so wie inOracle).
- Clojure wird zu Java-Bytecode kompiliert und in derJava Virtual Machine ausgeführt. Dadurch ist es möglich, in Clojure jede beliebige Java-Bibliothek zu verwenden, und für sehr viele von diesen gibt es (oft schmale) Wrapper-Bibliotheken in Clojure.
- Neben Clojure gibt esClojureScript, eine Sprache, die Konzept und Syntax mit Clojure teilt. Clojurescript wird zuJavaScript kompiliert.
Als Lisp-Dialekt spielt das PrinzipCode als Daten bzw.Homoikonizität eine wichtige Rolle. Das Makrosystem von Clojure beruht auf dieser Eigenschaft und erlaubt soMetaprogrammierung. Konkret kann Clojure davon profitieren, indem es Eigenschaften, die in anderen Programmiersprachen fest integriert sind, als Bibliotheken zur Verfügung stellt. Als Beispiele seien hierPattern Matching[5] und einTypsystem[6] genannt.
- Alex Miller mit Stuart Halloway und Aaron Bedra:Programming Clojure – Third Edition. Pragmatic Programmers, 2018,ISBN 978-1-68050-246-6.
- Rich Hickey:The Clojure programming language. In:Dynamic Languages Symposium archive, Proceedings of the 2008 symposium on Dynamic languages. Juli 2008,ISBN 978-1-60558-270-2,doi:10.1145/1408681.1408682.
- Stefan Kamphausen, Tim Oliver Kaiser:Clojure. dpunkt.verlag, 2010,ISBN 978-3-89864-684-0.
- Carin Meier:Living Clojure. O’Reilly, 2015,ISBN 978-1-4919-0904-1.
- Chas Emerick, Brian Carper und Christophe Grand:Clojure Programming. O’Reilly, 2012,ISBN 978-1-4493-9470-7.
- ↑Clojure Downloads
- ↑Rich Hickey: Books that influenced Clojure. 30. Juni 2009, abgerufen am 24. August 2010 (englisch).
- ↑Google Group Konversation zu Reader-Macros mit Clojure-Gründer Rich Hickey (in Englisch)
- ↑Clojure for the Brave and True - Appendix B Appendix B: Boot, the Fancy Clojure Build Framework, auf braveclojure.com (englisch)
- ↑core.match, auf github.com
- ↑core.typed, auf github.com
- ↑Light Table, auf lighttable.com
- ↑Cursive
- ↑CounterClockWise IDE, auf github.com
- ↑vsClojure, auf github.com
- ↑Clojure-Mode, auf github.com
- ↑cider, auf github.com
- ↑VimClojure : A filetype, syntax and indent plugin for Clojure, auf vim.org
- ↑Clojure, auf marketplace.visualstudio.com
- ↑Calva, auf marketplace.visualstudio.com
- ↑Clojure Sublimed - Packages - Package Control. packagecontrol.io, abgerufen am 24. Februar 2022.