Clojure to funkcyjny język programowania ogólnego przeznaczenia bazujący na modelu Lisp–1. Jego wzorcowa implementacja działa pod kontrolą JVM, ale istnieją też wydania pracujące w innych środowiskach, na przykład popularny ClojureScript zaimplementowany w JavaScripcie. Clojure jest Lispem, który powstał z myślą o przetwarzaniu współbieżnym i korzystaniu z ekosystemu Javy.
„Poczytaj mi Clojure” to podręcznik programowania w jednym z bardziej elastycznych i ekspresywnych języków służących do komunikacji człowieka z maszyną.
Clojure jest stworzonym przez Richa Hickeya dialektem języka Lisp, którego wzorcowa implementacja działa pod kontrolą maszyny wirtualnej Javy (ang. Java Virtual Machine, skr. JVM). Jest dynamicznie typizowanym językiem ogólnego przeznaczenia z odśmiecaniem pamięci i obsługą typu funkcyjnego. Poza formalizmem, siłą wyrazu i zwięzłością Lispu mamy pełen dostęp do ekosystemu Javy, możemy więc korzystać zarówno z wewnętrznych klas i ich metod, jak i z wielu dodatkowych, zewnętrznych bibliotek.
Clojure to przede wszystkim język funkcyjny (większość konstrukcji to funkcje lub elementy zachowujące się jak funkcje), chociaż dzięki obsłudze współdzielonych, zmiennych stanów i możliwościom operowania na obiektach możemy go nazwać językiem wieloparadygmatowym.
Zaprojektowany z myślą o wykonywaniu współbieżnym (ang. concurrent) Clojure realizuje ten cel dając programiście do dyspozycji trwałe (ang. persistent) struktury danych, w oparciu o które obsługiwane są dane niemutowalne (ang. immutable). Kiedy jednak zachodzi konieczność wyrażania stałych tożsamości, których stany mogą się zmieniać, do dyspozycji jest kilka tzw. typów referencyjnych.
Od jakiegoś czasu Clojure wykorzystywany jest w programowaniu zastosowań sieciowych, na przykład przy budowaniu aplikacji webowych z asynchroniczną komunikacją. Stąd rosnące zainteresowanie nim, szczególnie wśród tych, którzy programują również w Pythonie, Rubym, F# bądź Javie.
Od autora
Podręcznik ten był pierwotnie notatkami tworzonymi na potrzeby własne, pomocnymi w procesie nauki języka. Pierwsze zapiski umieszczałem w serwisach społecznościowych, a po kilku tygodniach postanowiłem zadbać o strukturę i formę, publikując treści w reaktywowanym m.in. z tej okazji serwisie.
Mam nadzieję, że samouczek przyda się każdemu, kto chce poznać Clojure i spróbować funkcyjnego stylu programowania. Nawet gdyby ten konkretny język nie okazał się strzałem w dziesiątkę, jeżeli chodzi o potrzeby praktycznych zastosowań, to z pewnością jego znajomość rozwinie lepsze umiejętności kodowania we wszystkich innych.
Dotychczas stworzony materiał podzielony jest na części (dokumenty hipertekstowe), a każda z nich zawiera przynajmniej jeden rozdział, poświęcony konkretnemu zagadnieniu ogólnemu. Podręcznik nie jest jeszcze kompletny, a w tym miejscu będę dodawał nowe rozdziały w miarę ich powstawania.
Nota prawna
„Poczytaj mi Clojure” jest utworem w rozumieniu prawa autorskiego i zastrzegam sobie do niego wszelkie prawa. Póki co nie zgadzam się na powielanie, rozpowszechnianie i publiczne wykonywanie. Może kiedyś zdecyduję się uwolnić część lub całość, albo wydać w innej formie.
Umieszczam ten podręcznik w Sieci, ponieważ pisanie nie jest moim głównym sposobem zarabiania na utrzymanie, a marże wydawnictw i dystrybutorów są zbyt duże, żeby na tę chwilę opłacało mi się z nimi współpracować. Moim skromnym marzeniem jest, aby ten zbiór tekstów zawierał tyle samo lub więcej wiedzy, niż każda wydana w języku polskim książka o Clojure, którą można kupić.
Wydanie drugie
Umieszczone poniżej odnośniki do kolejnych odcinków są pierwszą edycją podręcznika aktualizowaną na bieżąco do wydania drugiego. Na chwilę obecną (kwiecień, 2021) przeredagowane zostały części 1–16.