encyklopedia.space

Clojure

Clojure – współczesny, dynamiczny język programowania oparty na Lisp, uruchamiany na maszynie wirtualnej JVM oraz w środowiskach JavaScript dzięki projektowi ClojureScript. Jego twórcą jest Rich Hickey, a język jest szczególnie ceniony w środowiskach zajmujących się programowaniem funkcyjnym, przetwarzaniem równoległym i systemami o wysokiej dostępności.

Historia

Clojure zostało zaprezentowane po raz pierwszy w 2007 roku na konferencji JVM Language Conference. Autor, Rich Hickey, chciał stworzyć język łączący prostotę i moc Lisp z możliwościami platformy Java, w szczególności jej bogatym ekosystemem bibliotek i stabilnym środowiskiem uruchomieniowym. Pierwsza stabilna wersja 1.0 ukazała się w 2010 roku, a od tego czasu język jest rozwijany otwarto‑źródłowo na licencji EPL.

Charakterystyka i podstawowe założenia

  • Immutability – domyślna niezmienność struktur danych, co ułatwia programowanie współbieżne.
  • Homoikoniczność – kod i dane są reprezentowane w tej samej strukturze (listy), co umożliwia łatwe przetwarzanie kodu jako danych (makra).
  • Interoperacyjność z Java – bezpośredni dostęp do klas i metod z Java, co pozwala korzystać z istniejących bibliotek.
  • Współbieżność – wbudowane abstrakcje, takie jak agents, atoms, refs i software transactional memory (STM), zapewniające bezpieczne przetwarzanie wielowątkowe.
  • REPL (Read–Eval–Print Loop) – interaktywne środowisko programistyczne umożliwiające natychmiastowe testowanie fragmentów kodu.

Składnia

Podobnie jak inne języki z rodziny Lisp, Clojure używa notacji prefiksowej i bardzo prostych konstrukcji syntaktycznych:

(defn suma [a b] (+ a b))   ; definicja funkcji
(suma 3 4)                    ; wywołanie → 7

Podstawowymi elementami są:

  • def i defn – tworzenie stałych i funkcji.
  • let – wiązanie lokalnych wartości.
  • if, cond – konstrukcje warunkowe.
  • map, reduce, filter – operacje na kolekcjach.
  • defmacro – definiowanie makr, czyli kodu generującego kod.

Ekosystem i biblioteki

Clojure posiada rozbudowany zestaw bibliotek, dostępnych głównie poprzez narzędzie Leiningen oraz nowszy Clojure CLI. Najważniejsze z nich to:

  • Ring – interfejs do budowy aplikacji webowych.
  • Compojure – mikrofinał framework oparty na Ring.
  • Reagent – biblioteka do tworzenia interfejsów UI w stylu React w ClojureScript.
  • core.async – kanały i makra ułatwiające programowanie asynchroniczne.
  • spec – system do definiowania i weryfikacji kontraktów funkcji.

ClojureScript

W 2011 roku powstał projekt ClojureScript, który kompiluje kod Clojure do JavaScript. Dzięki temu można pisać aplikacje front‑endowe (np. w React) oraz korzystać z rozwiązań serwer‑side w jednym języku.

Porównanie z innymi językami

Cecha Clojure Haskell Scala Java
Model pamięci Immutability + STM Czyste funkcje Immutability + Option Mutable by default
Interoperacyjność Pełna z Java Ograniczona (via FFI) Pełna z Java Natychmiastowa
REPL Wbudowany GHCi Ammonite, sbt console JShell
Makra Tak Template Haskell Makra (Scala 3) Brak

Zastosowania

Clojure jest wykorzystywane w różnych dziedzinach:

  • Systemy rozproszone – np. Kafka (klienci Clojure), ZooKeeper (biblioteka zookeeper-clj).
  • Analiza danych – biblioteki Incanter i Spark w wersji spark-clojure.
  • Web development – serwisy oparte na Ring, Compojure, Pedestal.
  • Szybkie prototypowanie – dzięki REPL oraz krótkiej składni.

Przykładowy kod

(ns przyklad.core
  (:require [clojure.string :as str]))

(def dane [{:imie "Anna" :wiek 28}
           {:imie "Bartek" :wiek 35}
           {:imie "Celina" :wiek 22}])

(defn powitanie [osoba]
  (str "Cześć, " (:imie osoba) "! Masz " (:wiek osoba) " lat."))

;; Filtrujemy osoby powyżej 25 lat i wypisujemy powitania
(doseq [osoba (filter #(> (:wiek %) 25) dane)]
  (println (powitanie osoba)))

Środowiska programistyczne

Do pracy z Clojure najczęściej używa się następujących edytorów i IDE:

Licencja i społeczność

Clojure jest wydany na licencji EPL, co umożliwia zarówno komercyjne, jak i otwarto‑źródłowe wykorzystanie. Społeczność skupia się wokół blogów, list mailingowych (clojurians), spotkań Clojure/conj oraz konferencji EuroClojure. Projekty open‑source są hostowane na platformie Git (repozytoria publiczne).

Bibliografia

  1. Rich Hickey, “Clojure: A Modern Lisp”. – Oficjalna dokumentacja języka.
  2. Stuart Halloway, “Programming Clojure”. – Kompletny podręcznik dla początkujących.
  3. Alex Miller, “ClojureScript: A Practical Introduction”. – Materiał wprowadzający do ClojureScript.

W artykule użyto licznych linków wewnętrznych, które umożliwiają szybkie przejście do powiązanych tematów w encyklopedii.