Clojure - techniczne cechy języka
Język posiada następujące właściwości:
-
Funkcyjny
-
Nacisk na niezmienne struktury danych
-
Pragmatyczne wsparcie dla zmiennych struktur danych
-
Leniwe wartościowanie sekwencji
-
Z możliwością wymuszenia skutków ubocznych
-
-
-
Dynamicznie, silnie typowany
-
Kompilowany do bajtkodu JVM (JIT lub AOT). Sam rozprowadzany jako jar
-
Natywnie wspiera tworzenie obiektów Javy, wołanie ich metod; z Javy można wołać funkcje Clojura
-
Domknięcia (closures) z naciskiem na rekurencję zamiast pętli opartych o efekty uboczne
-
Wsparcie dla współbieżności
-
Transakcyjna pamięć (STM, mechanizm znany z systemów bazodanowych, taki ACID bez D)
-
System agentów (podobne do aktorów/procesów z Erlanga, tyle że bez rozproszenia)
-
-
Polimorfizm parametryczny (multimetody)
-
Makra (znane z Lispu)
-
Metadane (podobne do javowych anotacji czy atrybutów w C#, ale bardziej ogólne)
-
REPL (read-eval-print-loop, czyli tryb interaktywny)
-
Możliwość modyfikacji uruchomionego programu (hot patching)
-
Destrukturyzacja
-
Homoikoniczna składnia (code-as-data znane z Lispu)
-
Wyjątki (znane z Javy)
- Przestrzenie nazw
-
Dynamic i lexical scoping
Definicje
Clojure zaprowadza porządek w elementarnych pojęciach:
