clojure Tutorial
Erste Schritte mit Clojure
Suche…
Bemerkungen
Clojure ist eine dynamisch typisierte universelle Programmiersprache mit Lisp-Syntax.
Seine Funktionen unterstützen standardmäßig den funktionalen Stil der Programmierung mit erstklassigen Funktionen und unveränderlichen Werten. Die Verwendung von Variablen, die nicht zugewiesen werden können, ist in Clojure nicht so einfach wie in vielen gängigen Sprachen, da Variablen wie Containerobjekte erstellt und aktualisiert werden müssen. Dies fördert die Verwendung reiner Werte, die so bleiben, wie sie im Moment der letzten Betrachtung waren. Dadurch wird Code in der Regel viel vorhersehbarer, testbarer und für Parallelität geeignet. Dies funktioniert auch für Sammlungen, da die eingebauten Datenstrukturen von Clojure dauerhaft sind.
Für die Leistung unterstützt Clojure Typhinweise, um nach Möglichkeit unnötige Reflexionen zu vermeiden. Außerdem können Änderungsgruppen an persistenten Sammlungen an vorübergehenden Versionen vorgenommen werden, wodurch die Anzahl der betroffenen Objekte reduziert wird. Dies ist meistens nicht notwendig, da permanente Sammlungen schnell kopiert werden können, da sie den Großteil ihrer Daten gemeinsam nutzen. Ihre Leistungsgarantien sind nicht weit von ihren veränderlichen Kollegen entfernt.
Clojure bietet unter anderem:
- Software-Transaktionsspeicher (STM)
- Mehrere Gleichzeitigkeits-Primitive, die kein manuelles Sperren beinhalten (Atom, Agent)
- zusammensetzbare Folgetransformatoren (Transducer),
- funktionelle Baummanipulationsmöglichkeiten (Reißverschlüsse)
Aufgrund der einfachen Syntax und der hohen Erweiterbarkeit (über Makros, Implementierung von Kernschnittstellen und Reflektion) können einige häufig verwendete Sprachfeatures zu Clojure mit Bibliotheken hinzugefügt werden. Zum Beispiel enthält core.typed
einen statischen core.async
, core.async
einfache kanalbasierte Parallelitätsmechanismen, core.logic
Logikprogrammierung.
Als gehostete Sprache konzipiert, kann sie mit der Plattform, auf der sie ausgeführt wird, zusammenarbeiten. Während das Hauptziel JVM und das gesamte Ökosystem hinter Java ist, können alternative Implementierungen auch in anderen Umgebungen ausgeführt werden, z. B. ClojureCLR, das unter Common Language Runtime ausgeführt wird, oder ClojureScript, das unter JavaScript-Laufzeit (einschließlich Webbrowsern) ausgeführt wird. Während für alternative Implementierungen möglicherweise einige Funktionen der JVM-Version fehlen, gelten sie immer noch als eine Familie von Sprachen.
Versionen
Ausführung | Änderungsprotokoll | Veröffentlichungsdatum |
---|---|---|
1.8 | Letztes Änderungsprotokoll | 2016-01-19 |
1.7 | Änderungsprotokoll 1.7 | 2015-06-30 |
1.6 | Änderungsprotokoll 1.6 | 2014-03-25 |
1.5.1 | Änderungsprotokoll 1.5.1 | 2013-03-10 |
1.4 | Änderungsprotokoll 1.4 | 2012-04-15 |
1.3 | Änderungsprotokoll 1.3 | 2011-09-23 |
1.2.1 | 2011-03-25 | |
1.2 | 2010-08-19 | |
1.1 | 2010-01-04 | |
1,0 | 2009-05-04 |
Installation und Einrichtung
Option 1: Leiningen
Benötigt JDK 6 oder neuer.
Der einfachste Weg, um mit Clojure zu beginnen, ist das Herunterladen und Installieren von Leiningen, dem De-facto-Standardwerkzeug zum Verwalten von Clojure-Projekten. Anschließend wird mit lein repl
eine REPL geöffnet.
Linux
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein export PATH=$PATH:~/bin chmod 755 ~/bin/lein
OS X
Folgen Sie den oben genannten Linux-Schritten oder installieren Sie sie mit den macOS-Paketmanagern.
Mit Homebrew installieren
brew install leiningen
Mit MacPorts installieren
Installieren Sie zuerst Clojure
sudo port -R install clojure
Installieren Sie Leiningen
, ein Build-Tool für Clojure
sudo port -R install leiningen
lein self-install
Windows
Siehe die offizielle Dokumentation .
Option 2: Offizielle Verteilung
Benötigt JRE 6 oder neuer.
Clojure-Versionen werden als einfache JAR- Dateien veröffentlicht, die in der JVM ausgeführt werden können. Dies geschieht normalerweise in den Clojure-Build-Tools.
Gehen Sie zu http://clojure.org und laden Sie das neueste Clojure-Archiv herunter
Extrahieren Sie die heruntergeladene ZIP- Datei in ein Verzeichnis Ihrer Wahl
java -cp clojure-1.8.0.jar clojure.main
in diesem Verzeichnisjava -cp clojure-1.8.0.jar clojure.main
ausMöglicherweise müssen Sie die
clojure-1.8.0.jar
in diesem Befehl durch den Namen der tatsächlich heruntergeladenen JAR-Dateiclojure-1.8.0.jar
.Für ein besseres REPL-Erlebnis in der Befehlszeile (z. B. Durchlaufen der vorherigen Befehle) können Sie
rlwrap
installieren:rlwrap java -cp clojure-1.8.0.jar clojure.main
Option 3: Booten
Benötigt JDK 7 oder neuer.
Boot ist ein multifunktionales Clojure-Build-Tool. Um dies zu verstehen, sind einige Kenntnisse von Clojure erforderlich, daher ist dies möglicherweise nicht die beste Option für Anfänger. Installationsanweisungen finden Sie auf der Website (klicken Sie dort auf " Erste Schritte" ).
Sobald es installiert ist und sich in Ihrem PATH
, können Sie boot repl
überall boot repl
, um eine Clojure REPL zu starten.
"Hallo Welt!" in der REPL
Die Clojure-Community legt großen Wert auf interaktive Entwicklung, sodass eine ganze Reihe von Interaktionen mit Clojure innerhalb einer REPL (Read-Eval-Print-Loop) stattfinden . Bei der Eingabe eines Ausdruck hinein, liest Clojure es, wertet sie aus und druckt das Ergebnis der Auswertung, die alle in einer Schleife.
Sie sollten jetzt eine Clojure REPL starten können. Wenn Sie nicht wissen, wie das geht, folgen Sie dem Abschnitt Installation und Setup in diesem Thema. Wenn Sie es ausgeführt haben, geben Sie Folgendes ein:
(println "Hello, world!")
Dann drücken Sie die Eingabetaste . Dies sollte Hello, world!
ausdrucken Hello, world!
, gefolgt vom Rückgabewert dieses Ausdrucks, nil
.
Wenn Sie Clojure sofort ausführen möchten, versuchen Sie Online-REPL. Zum Beispiel http://www.tryclj.com/ .
Erstellen Sie eine neue Anwendung
Nachdem Sie die obigen Anweisungen befolgt und Leiningen installiert haben, starten Sie ein neues Projekt, indem Sie Folgendes ausführen:
lein new <project-name>
Dadurch wird ein Clojure-Projekt mit der Standardvorlage von Leiningen im Ordner <project-name>
. Es gibt mehrere Vorlagen für Leiningen, die sich auf die Projektstruktur auswirken. Am häufigsten wird die Vorlage "app" verwendet, die eine Hauptfunktion hinzufügt und das Projekt zum Packen in eine JAR-Datei vorbereitet (wobei die Hauptfunktion der Eingangspunkt der Anwendung ist). Dies kann mit folgenden Schritten erreicht werden:
lein new app <project-name>
Vorausgesetzt, Sie haben die App-Vorlage zum Erstellen einer neuen Anwendung verwendet, können Sie testen, ob alles korrekt eingerichtet wurde. Geben Sie dazu das erstellte Verzeichnis ein und führen Sie die Anwendung folgendermaßen aus:
lein run
Wenn Sie Hello, World!
Auf Ihrer Konsole sind Sie fertig und können mit dem Erstellen Ihrer Anwendung beginnen.
Sie können diese einfache Anwendung mit dem folgenden Befehl in zwei JAR-Dateien packen:
lein uberjar
"Hallo Welt!" mit boot
Hinweis: Sie müssen Boot installieren, bevor Sie dieses Beispiel ausprobieren. Siehe Abschnitt Installation und Setup, falls Sie es noch nicht installiert haben.
Boot ermöglicht das Erstellen ausführbarer Clojure-Dateien mithilfe der Shebang- Zeile (#!). Fügen Sie den folgenden Text in eine Datei Ihrer Wahl ein (in diesem Beispiel wird davon hello.clj
dass er sich im "aktuellen Arbeitsverzeichnis" befindet und hello.clj
).
#!/usr/bin/env boot
(defn -main [& args]
(println "Hello, world!"))
Dann kennzeichnen Sie es als ausführbar (falls zutreffend, indem Sie normalerweise chmod +x hello.clj
).
... und führen Sie es aus ( ./hello.clj
).
Das Programm sollte "Hallo, Welt!" Ausgeben. und beende.
Neue Anwendung erstellen (mit Booten)
boot -d seancorfield/boot-new new -t app -n <appname>
Dieser Befehl weist boot an, die Aufgabe boot-new
von https://github.com/seancorfield/boot-new zu übernehmen und die Task mit der app
Vorlage auszuführen (siehe Link für andere Vorlagen). Die Task erstellt ein neues Verzeichnis mit dem Namen <appname>
mit einer typischen Clojure-Anwendungsstruktur. Weitere Informationen finden Sie in der generierten README.
Um die Anwendung boot run
: boot run
. Andere Befehle werden in build.boot
und in der build.boot
beschrieben.