clojure Samouczek
Pierwsze kroki z clojure
Szukaj…
Uwagi
Clojure jest dynamicznie pisanym językiem programowania ogólnego przeznaczenia o składni Lisp.
Jego funkcje domyślnie obsługują styl programowania z pierwszorzędnymi funkcjami i niezmiennymi wartościami. Używanie zmiennych, które można ponownie przypisać, nie jest tak łatwe w Clojure, jak w wielu językach głównego nurtu, ponieważ zmienne muszą być tworzone i aktualizowane jak obiekty kontenerowe. Zachęca to do korzystania z czystych wartości, które pozostaną takie, jakie były w momencie ich ostatniego oglądania. Zwykle sprawia to, że kod jest znacznie bardziej przewidywalny, testowalny i umożliwia współbieżność. Działa to również w przypadku kolekcji, ponieważ wbudowane struktury danych Clojure są trwałe.
Aby uzyskać wydajność, Clojure obsługuje podpowiedzi typu, aby wyeliminować niepotrzebne odbicie, jeśli to możliwe. Grupy zmian w trwałych kolekcjach można również wprowadzić w przejściowych wersjach, zmniejszając liczbę zaangażowanych obiektów. Nie jest to konieczne przez większość czasu, ponieważ trwałe kolekcje są szybko kopiowane, ponieważ udostępniają większość swoich danych. Ich gwarancje wydajności nie są dalekie od ich zmiennych odpowiedników.
Oprócz innych funkcji Clojure posiada również:
- programowa pamięć transakcyjna (STM)
- kilka operacji podstawowych współbieżnych nie wymagających ręcznego blokowania (atom, agent)
- transformatory sekwencyjne (przetworniki),
- funkcjonalne narzędzia do manipulacji drzewem (zamki)
Ze względu na prostą składnię i wysoką rozszerzalność (za pomocą makr, implementacji podstawowych interfejsów i refleksji), niektóre często spotykane funkcje językowe można dodać do Clojure z bibliotekami. Na przykład core.typed
zapewnia sprawdzanie typu statycznego, core.async
zapewnia proste mechanizmy współbieżności oparte na core.logic
, core.logic
wprowadza programowanie logiki.
Zaprojektowany jako język hostowany, może współpracować z platformą, na której działa. Podczas gdy głównym celem jest JVM i cały ekosystem za Javą, alternatywne implementacje mogą również działać w innych środowiskach, takich jak ClojureCLR działający w środowisku uruchomieniowym Common Language lub ClojureScript działający w środowisku wykonawczym JavaScript (w tym przeglądarki internetowe). Chociaż alternatywne implementacje mogą nie zawierać niektórych funkcji wersji JVM, nadal są uważane za jedną rodzinę języków.
Wersje
Wersja | Zmień dziennik | Data wydania |
---|---|---|
1.8 | Ostatni dziennik zmian | 19.01.2016 |
1.7 | Dziennik zmian 1.7 | 30.06.2015 |
1.6 | Dziennik zmian 1.6 | 2014-03-25 |
1.5.1 | Dziennik zmian 1.5.1 | 2013-03-10 |
1.4 | Dziennik zmian 1.4 | 15.04.2012 |
1.3 | Dziennik zmian 1.3 | 23.09.2011 |
1.2.1 | 25.03.2011 | |
1.2 | 19.08.2010 | |
1.1 | 04.01.2010 | |
1.0 | 2009-05-04 |
Instalacja i konfiguracja
Opcja 1: Leiningen
Wymaga JDK 6 lub nowszego.
Najłatwiejszym sposobem na rozpoczęcie pracy z Clojure jest pobranie i zainstalowanie Leiningen, de facto standardowego narzędzia do zarządzania projektami Clojure, a następnie uruchomienie lein repl
aby otworzyć REPL .
Linux
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein export PATH=$PATH:~/bin chmod 755 ~/bin/lein
OS X
Postępuj zgodnie z powyższymi instrukcjami dla systemu Linux lub zainstaluj za pomocą menedżerów pakietów macOS.
Zainstaluj z Homebrew
brew install leiningen
Zainstaluj z MacPorts
Najpierw zainstaluj Clojure
sudo port -R install clojure
Zainstaluj Leiningen
, narzędzie do kompilacji dla Clojure
sudo port -R install leiningen
lein self-install
Windows
Zobacz oficjalną dokumentację .
Opcja 2: oficjalna dystrybucja
Wymaga środowiska JRE 6 lub nowszego.
Wersje Clojure są publikowane jako proste pliki JAR do uruchomienia w JVM. Tak zwykle dzieje się w narzędziach do budowania Clojure.
Wejdź na http://clojure.org i pobierz najnowsze archiwum Clojure
Wyodrębnij pobrany plik ZIP do wybranego katalogu
Uruchom
java -cp clojure-1.8.0.jar clojure.main
w tym kataloguMoże być konieczne zastąpienie
clojure-1.8.0.jar
w tym poleceniu nazwą pliku JAR, który rzeczywiście pobrałeś.Aby uzyskać lepsze wrażenia REPL z wiersza poleceń (np.
rlwrap
poprzednich poleceń), możesz zainstalowaćrlwrap
:rlwrap java -cp clojure-1.8.0.jar clojure.main
Opcja 3: Uruchomienie
Wymaga JDK 7 lub nowszego.
Boot to wielofunkcyjne narzędzie do budowania Clojure. Zrozumienie tego wymaga pewnej wiedzy o Clojure, więc może nie być najlepszą opcją dla początkujących. Zobacz stronę internetową (kliknij Rozpocznij tam), aby uzyskać instrukcje instalacji.
Po zainstalowaniu i w PATH
możesz uruchomić boot repl
dowolnym miejscu, aby uruchomić REPL Clojure.
"Witaj świecie!" w REPL
Społeczność Clojure kładzie duży nacisk na interaktywny rozwój, więc całkiem sporo interakcji z Clojure odbywa się w ramach REPL (read-eval-print-loop) . Po wprowadzeniu do niego wyrażenia Clojure odczytuje je, ocenia je i drukuje wynik oceny, wszystko w pętli .
Powinieneś już być w stanie uruchomić Clojure REPL. Jeśli nie wiesz jak, postępuj zgodnie z sekcją Instalacja i konfiguracja w tym temacie. Po uruchomieniu wpisz w nim następujące polecenie:
(println "Hello, world!")
Następnie naciśnij Enter . To powinno wydrukować Hello, world!
, po której następuje wartość zwracana tego wyrażenia, nil
.
Jeśli chcesz natychmiast uruchomić clojure, spróbuj online REPL. Na przykład http://www.tryclj.com/ .
Stwórz nową aplikację
Po wykonaniu powyższych instrukcji i zainstalowaniu Leiningen rozpocznij nowy projekt, uruchamiając:
lein new <project-name>
Spowoduje to skonfigurowanie projektu Clojure z domyślnym szablonem Leiningen w folderze <project-name>
. Istnieje kilka szablonów dla Leiningen, które wpływają na strukturę projektu. Najczęściej używany jest szablon „aplikacja”, który dodaje funkcję główną i przygotowuje projekt do spakowania do pliku jar (którego główną funkcją jest punkt wejścia aplikacji). Można to osiągnąć, uruchamiając:
lein new app <project-name>
Zakładając, że użyłeś szablonu aplikacji do utworzenia nowej aplikacji, możesz sprawdzić, czy wszystko zostało poprawnie skonfigurowane, wchodząc do utworzonego katalogu i uruchamiając aplikację, używając:
lein run
Jeśli widzisz Hello, World!
na konsoli jesteś gotowy i możesz rozpocząć tworzenie aplikacji.
Możesz spakować tę prostą aplikację do dwóch plików jar za pomocą następującego polecenia:
lein uberjar
"Witaj świecie!" za pomocą Boot
Uwaga: przed wypróbowaniem tego przykładu musisz zainstalować Boot. Zobacz sekcję Instalacja i konfiguracja, jeśli jeszcze jej nie zainstalowałeś.
Boot pozwala na tworzenie wykonywalnych plików Clojure za pomocą linii shebang (#!). Umieść następujący tekst w wybranym pliku (w tym przykładzie założono, że znajduje się on w „bieżącym katalogu roboczym” i nazywa się hello.clj
).
#!/usr/bin/env boot
(defn -main [& args]
(println "Hello, world!"))
Następnie zaznacz go jako wykonywalny (jeśli dotyczy, zazwyczaj uruchamiając chmod +x hello.clj
).
... i uruchom go ( ./hello.clj
).
Program powinien wypisać „Witaj, świecie!” i koniec.
Utwórz nową aplikację (z bootowaniem)
boot -d seancorfield/boot-new new -t app -n <appname>
To polecenie każe bootowi pobrać zadanie boot-new
z https://github.com/seancorfield/boot-new i wykonać zadanie z szablonem app
(patrz link do innych szablonów). Zadanie utworzy nowy katalog o nazwie <appname>
z typową strukturą aplikacji Clojure. Aby uzyskać więcej informacji, zobacz wygenerowany plik README.
Aby uruchomić aplikację: boot run
. Inne polecenia są określone w build.boot
i opisane w README.