Clojure
| Clojure | |
| |
|
| Pojawienie się | 16 października 2007 [1] |
| Paradygmat | funkcyjny , wieloparadygmatowy |
| Typowanie | dynamiczne , silne |
| Aktualna wersja stabilna | 1.4 (18 kwietnia 2012 ) |
| Twórca | Rich Hickey |
| Licencja | Eclipse Public License |
| Platforma sprzętowa | wieloplatformowy |
| Platforma systemowa | wieloplatformowy |
| Oficjalna strona Clojure | |
Clojure ( /'klo'uʒə/ [2] ) – nowoczesny dialekt języka programowania Lisp opracowany przez Richa Hickeya . Jest to język ogólnego przeznaczenia, wspierający modyfikację uruchomionego programu i zachęcający do programowania funkcyjnego oraz współbieżnego .
Clojure akcentuje niezmienność struktur danych jako kluczową technikę ułatwiającą programowanie współbieżne . Działa na wirtualnej maszynie Javy . Może być uruchamiany przez interpreter lub kompilowany do kodu bajtowego . Można w nim tworzyć aplety , aplikacje , lub Serwlety , co umożliwia tworzenie aplikacji internetowych w całości w języku Clojure. Cały język mieści się w jednym pliku jar . Ma rozbudowany system makr znany z Lispu, dzięki czemu można rozszerzać język o nowe konstrukcje. Posiada jedną przestrzeń nazw dla funkcji i zmiennych tak jak Scheme . Posiada pełną integrację z językiem Java , można uruchamiać kod Clojure z poziomu Javy jak i kod Javy z poziomu Clojure.
Spis treści |
[ edytuj ] Etymologia nazwy
Nazwa Clojure pochodzi od słowa Closure (domknięcie), które jest ważnym elementem języka Lisp, z literą s zamienioną na j, wskazująca Javę . Autor chciał utworzyć nazwę, która nawiązywałaby do C# , Lispa i Javy [2] i to właśnie dlatego wybrał to słowo na nazwę swojego języka programowania.
[ edytuj ] Niektóre cechy języka
- Kompilowany do kodu bajtowego JVM ( ang. Java Virtual Machine, wirtualna maszyna Javy);
- Pełna kompatybilność z Javą : Clojure natywnie wywołuje metody Javy i na odwrót;
- Możliwość pracy w trybie interaktywnym REPL ( ang. read–eval–print loop, pętla wczytaj–wykonaj–wypisz);
- Domknięcia z naciskiem na rekurencję ;
- Bogata biblioteka stałych struktur danych;
- Silne wsparcie dla współbieżności w postaci transakcyjnej pamięci ( ang. Software Transactional Memory – STM) i systemu
agentów.
[ edytuj ] Przykłady
[ edytuj ] Uruchomienie REPL
java -cp clojure.jar clojure.main
[ edytuj ] Wypisywanie tekstu
(println "Hello world!")
[ edytuj ] Definicja zmiennej
(def zmienna (+ 2 (* 4 5)))
[ edytuj ] Definicja funkcji
Funkcja obliczająca silnie (nazwy zmiennych tj. symboli, tak jak w innych dialektach języka lisp mogą się składać z dowolnych znaków).
(defn ! [x] (if (= x 0) 1 (* x (! (- x 1)))))
[ edytuj ] Funkcje anonimowe
(fn [x] (* 2 (/ 3 4)))
[ edytuj ] Funkcje wyższego rzędu
(defn f [x] (* 2 (/ 3 4))) (map f '(3 4 5 6 7 8)) ;; Lub to samo używając funkcji anonimowej: (map (fn [x] (* 2 (/ 3 4))) '(3 4 5 6 7 8))
[ edytuj ] Makra
Makro define służące do definiowania funkcji jak w Scheme . W odróżnieniu od innych dialektów, do obliczenia wyrażenia wewnątrz cytowania Quasi-quotation, zamiast przecinka używa się znaku tyldy .
(defmacro define [params & body] `(defn ~(first params) [~@(rest params)] ~@body)) (define (f x) (* x x)) (f 10)
[ edytuj ] Tworzenie nowego obiektu Javy
(new java.lang.String "Hello world!")
[ edytuj ] Wywoływanie metody obiektu
(defn upper [s] (.toUpperCase s)) (upper (new java.lang.String "foo bar"))
[ edytuj ] Wywyoływanie metody statycznej
Funkcja string → integer występująca w języku Scheme .
(defn string→integer ([str] (Integer/parseInt str 10)) ([str base] (Integer/parseInt str base)))
[ edytuj ] GUI
Użycie biblioteki Swing .
(javax.swing.JOptionPane/showMessageDialog nil "Hello world!")
[ edytuj ] Zobacz też
- Lisp .
[ edytuj ] Linki zewnętrzne
- Oficjalna strona Clojure ( ang. ),
- Strona Clojure ( ang. )
- Grupa Google ( ang. ),
- Obszerne wprowadzenie ( ang. ),
- Zbiór popularnych odsyłaczy dotyczących Clojure ( ang. ),
- Polskie wprowadzenie i tutorial ( pol. ).
[ edytuj ] Bibliografia
- Rationale . W: Rich Hickey [on-line]. clojure.org. [dostęp 2011-07-18].
Przypisy
- ↑ Rich Hickey: Pierwszy rok Clojure'a ( ang. ). 16 października 2008. [dostęp 2011-07-18].
- ↑ 2,0 2,1 Rich Hickey: Znaczenie i wymowa „Clojure” ( ang. ). 5 stycznia 2009. [dostęp 2011-07-18].
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

