Zum Inhalt springen

„Clojure“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
entlinkt, nach Löschung; der EN ist kein brauchbarer Beleg für diese Aussage - weitergehende Löschaktivitäten will ich nicht selbst umsetzen
K typo, form
Zeile 15: Zeile 15:
| Dialekte =
| Dialekte =
| Standardisierungen =
| Standardisierungen =
| Beeinflusst_von = [[Lisp]], [[Prolog (Programmiersprache)|Prolog]], [[ML (Programmiersprache)|ML]], [[Erlang (Programmiersprache)|Erlang]], [[Haskell (Programmiersprache)|Haskell]], [[Java (Programmiersprache)|Java]]<ref>{{cite web |title=Books that influenced Clojure |url=http://www.amazon.com/gp/richpub/listmania/fullview/R3LG3ZBZS4GCTH |date=30. Juni 2009 |author=Rich Hickey |accessdate=24. August 2010}}</ref>
| Beeinflusst_von = [[Lisp]], [[Prolog (Programmiersprache)|Prolog]], [[ML (Programmiersprache)|ML]], [[Erlang (Programmiersprache)|Erlang]], [[Haskell (Programmiersprache)|Haskell]], [[Java (Programmiersprache)|Java]]<ref>{{cite web |title=Books that influenced Clojure |url=http://www.amazon.com/gp/richpub/listmania/fullview/R3LG3ZBZS4GCTH |date=2009-06-30 |author=Rich Hickey |accessdate=2010-08-24}}</ref>
| Beeinflusste =
| Beeinflusste =
| Betriebssystem = [[Microsoft Windows|Windows]], [[Linux]], [[macOS]], [[Solaris (Betriebssystem)|Solaris]], [[FreeBSD]]
| Betriebssystem = [[Microsoft Windows|Windows]], [[Linux]], [[macOS]], [[Solaris (Betriebssystem)|Solaris]], [[FreeBSD]]
Zeile 24: Zeile 24:
'''Clojure''' [{{IPA|ˈkləʊʒə(r)}}] ist ein moderner [[Lisp]]-Dialekt, der interaktive Entwicklung unterstützt. Die Sprache fördert einen [[Funktionale Programmierung|funktionalen]] Stil, der [[Thread (Informatik)|nebenläufige]] Programmierung stark vereinfacht. Clojure läuft in der [[Java Virtual Machine]] und ist eng mit der [[Java-Plattform|Java Runtime]] integriert. Eine [[JavaScript]]-Implementierung mit dem Namen ClojureScript sowie eine [[Common Language Runtime|CLR]]-Implementierung existieren ebenso. Das [[Makro#Makros in der Programmierung|Makrosystem]] ist mit dem anderer Lisp-Umgebungen vergleichbar.
'''Clojure''' [{{IPA|ˈkləʊʒə(r)}}] ist ein moderner [[Lisp]]-Dialekt, der interaktive Entwicklung unterstützt. Die Sprache fördert einen [[Funktionale Programmierung|funktionalen]] Stil, der [[Thread (Informatik)|nebenläufige]] Programmierung stark vereinfacht. Clojure läuft in der [[Java Virtual Machine]] und ist eng mit der [[Java-Plattform|Java Runtime]] integriert. Eine [[JavaScript]]-Implementierung mit dem Namen ClojureScript sowie eine [[Common Language Runtime|CLR]]-Implementierung existieren ebenso. Das [[Makro#Makros in der Programmierung|Makrosystem]] ist mit dem anderer Lisp-Umgebungen vergleichbar.


Clojure-Projekte werden auch mithilfe der Software ''Leiningen'' verwirklicht
Clojure-Projekte werden auch mithilfe der Software ''Leiningen'' verwirklicht.


== Beispiele ==
== Beispiele ==
Zeile 61: Zeile 61:
* Die Abstraktion der Folge (''sequence'') erlaubt es, alle diese Datenstrukturen uniform mit denselben Funktionen zu verwenden. Folgen werden typischerweise verzögert ([[Lazy Evaluation|''lazy'']]) ausgewertet.
* Die Abstraktion der Folge (''sequence'') erlaubt es, alle diese Datenstrukturen uniform mit denselben Funktionen zu verwenden. Folgen werden typischerweise verzögert ([[Lazy Evaluation|''lazy'']]) ausgewertet.
* Alle Datenstrukturen sind Werte (''immutable'').
* Alle Datenstrukturen sind Werte (''immutable'').
* Zustandsbehaftete Daten werden in Clojure durch spezielle Typen realisiert (''atoms'' und ''refs''). Der konkurrierende Zugriff auf Variablen mit veränderlichen Werten wird mittels STM ([[Transaktionaler Speicher|''software transactional memory'']]) durch das Laufzeitsystem der Sprache synchronisiert. Die Konzepte entsprechen der [[Multiversion Concurrency Control]], wie sie in [[Datenbank|Datenbankmanagementsystemen]] verwendet werden (exakt so wie in [[Oracle]]).
* Zustandsbehaftete Daten werden in Clojure durch spezielle Typen realisiert (''atoms'' und ''refs''). Der konkurrierende Zugriff auf Variablen mit veränderlichen Werten wird mittels STM ([[Transaktionaler Speicher|''software transactional memory'']]) durch das Laufzeitsystem der Sprache synchronisiert. Die Konzepte entsprechen der [[Multiversion Concurrency Control]], wie sie in [[Datenbank]]managementsystemen verwendet werden (exakt so wie in [[Oracle]]).
* Clojure wird zu Java-Bytecode kompiliert und in der [[Java 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.
* Clojure wird zu Java-Bytecode kompiliert und in der [[Java 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 es [[ClojureScript]], eine Sprache, die Konzept und Syntax mit Clojure teilt. Clojurescript wird zu [[JavaScript]] kompiliert.
* Neben Clojure gibt es [[ClojureScript]], eine Sprache, die Konzept und Syntax mit Clojure teilt. Clojurescript wird zu [[JavaScript]] kompiliert.

Version vom 1. November 2022, 12:14 Uhr

Clojure
Clojure Logo
Basisdaten
Paradigmen: Funktionale Programmiersprache
Erscheinungsjahr: 2007
Entwickler: Rich Hickey
Aktuelle Version: 1.11[1]  (22. März 2022)
Typisierung: dynamisch, stark
Beeinflusst von: Lisp, Prolog, ML, Erlang, Haskell, Java[2]
Betriebssystem: Windows, Linux, macOS, Solaris, FreeBSD
Lizenz: Eclipse Public License
https://clojure.org/

Clojure [ˈkləʊʒə(r)] ist ein moderner Lisp-Dialekt, der interaktive Entwicklung unterstützt. Die Sprache fördert einen funktionalen Stil, der nebenläufige Programmierung stark vereinfacht. Clojure läuft in der Java Virtual Machine und ist eng mit der Java Runtime integriert. Eine JavaScript-Implementierung mit dem Namen ClojureScript sowie eine CLR-Implementierung existieren ebenso. Das Makrosystem ist mit dem anderer Lisp-Umgebungen vergleichbar.

Clojure-Projekte werden auch mithilfe der Software Leiningen verwirklicht.

Beispiele

Vollständige Hallo-Welt-Programme:

textuell im Lisp-Stil:

(println "Hallo Welt!")

grafisch mit Hilfe der Java-Bibliothek Swing:

(javax.swing.JOptionPane/showMessageDialog nil "Hallo Welt!")

Die Fakultäts-Funktion als Beispiel für Rekursion in Clojure:

(defn factorial [n]
  "tail recursive version of n!"
  (loop [cur n, acc 1]
    (if (<= cur 1)
      acc
      (recur (dec cur) (*' cur acc)))))

Die Fakultäts-Funktion durch Verwendung von Funktionen höherer Ordnung:

(defn fac [n]
  (reduce *' (range 1 (inc n))))

Merkmale von Clojure

  • Funktionale Sprache mit einer Lisp-Syntax.
  • Dynamische, interaktive Entwicklung in der REPL (Read-eval-print loop).
  • Neben der in Lisp 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 und refs). Der konkurrierende Zugriff auf Variablen mit veränderlichen Werten wird mittels STM (software transactional memory) durch das Laufzeitsystem der Sprache synchronisiert. Die Konzepte entsprechen der Multiversion Concurrency Control, wie sie in Datenbankmanagementsystemen verwendet werden (exakt so wie in Oracle).
  • Clojure wird zu Java-Bytecode kompiliert und in der Java 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 es ClojureScript, eine Sprache, die Konzept und Syntax mit Clojure teilt. Clojurescript wird zu JavaScript kompiliert.

Homoikonizität

Als Lisp-Dialekt spielt das Prinzip Code als Daten bzw. Homoikonizität eine wichtige Rolle. Das Makrosystem von Clojure beruht auf dieser Eigenschaft und erlaubt so Metaprogrammierung. Konkret kann Clojure davon profitieren, indem es Eigenschaften, die in anderen Programmiersprachen fest integriert sind, als Bibliotheken zur Verfügung stellt. Als Beispiele seien hier Pattern Matching[3] und ein Typsystem[4] genannt.

IDE-Unterstützung

Literatur

Wikibooks: Clojure Programming – Lern- und Lehrmaterialien (englisch)

Einzelnachweise

  1. Clojure Downloads
  2. Rich Hickey: Books that influenced Clojure. 30. Juni 2009, abgerufen am 24. August 2010.
  3. github.com
  4. github.com
  5. Light Table
  6. Cursive
  7. Counterclockwise
  8. vsClojure
  9. Clojure-Mode
  10. CIDER
  11. VimClojure
  12. Clojure
  13. Calva
  14. Clojure Sublimed - Packages - Package Control. Abgerufen am 24. Februar 2022.