Clojure Curriculum

Ta strona powstała w wyniku dyskusji z kolegą o pewnej aplikacji. Ja opisałem pomysł, kolega po kliku dniach wrócił z koncepcją jego realizacji w oparciu o Clojure. Clojure to nowy język programowania bazujący na Lisp i działający w środowisku JVM. Ja potrafię napisać kawałek kodu ale nie uważam się za programistę. Kolega jest w tej dziedzinie niepomiernie lepszy. Zaletą Clojure ma być łatwość tworzenia kodu rozwiązującego problem, kodu jest klika razy mniej iż np. w Javie, pisze się go znacznie szybciej i przyjemniej. Kolega przesłał mi listę materiałów do obejrzenia i rekomendację:

Naprawdę dobry materiał nawet jeżeli nie chce się tego wykorzystywać – znakomicie poszerza horyzonty

Przesłane ‚Curriculum’ Clojure oglądam w wolnych chwilach w kolejności sugerowanej przez kolegę. Zamieszczone tutaj może przydać się innym. Autorem większość materiału jest Rich Hickey – autor główny ‚ideolog’ Clojure.

Clojure data structures

Prezentacje opisują ‚immutable’ (‚persistent’) struktury danych Clojure – jest nawet trochę o tym jak te struktury wewnętrznie działają. Warto zwrócić uwagę na: standardowe struktury danych: listy, wektory, mapy, zbiory (i jak są one wewnętrznie implementowane), ISeq – uniwersalny iterator, uniwersalne operatory: conj, seq i inne.

Część 1: https://www.youtube.com/watch?v=ketJlzX-254

Część 2: https://www.youtube.com/watch?v=sp2Zv7KFQQ0

Prezentacja o strukturach danych (bardziej ‚filozoficzna’): http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

Clojure for Java programmers

https://www.youtube.com/watch?v=P76Vbsk_3J0. Materiał jak nazwa wskazuje przygotowany dla programistów Java.

Clojure concurrency

Mechanizmy wspierające te struktury danych we współbieżnych aplikacjach – refs, transakcje, agenty, atomy. Podobno w praktyce wszyscy używają atomów ze względu na wady pamięci transakcyjnej. https://www.youtube.com/watch?v=dGVqrGmwOAw

Clojure protocols:

Odpowiednik interfejsów w Javie. Ciekawą cechą protokołów jest to że można ‚oprotokołować’ istniejącą klasę, np. String. Warto też dla porównania zajrzeć do multimethods – również dostępne w standardowym clojure. http://vimeo.com/11236603

Core.async

Implementacja CSP (Concurrent Sequential Processes) dla Clojure  – trochę inny rodzaj współbieżności niż standardowe wątki:

http://www.infoq.com/presentations/clojure-core-async

Language of a system: https://www.youtube.com/watch?v=ROor6_NGIWU prezentacja pokazująca filozofię core.async.

Reducers

http://www.infoq.com/presentations/Clojure-Reducers

Bardziej abstrakcyjne podejście do standardowych funkcji przetwarzających kolekcje map, reduce, filter itd. – czyli standardowe funkcje w programowaniu funkcyjnym – przemyślane tak współbieżność/laziness były niezależne od algorytmów które te funkcje implementują. Warte obejrzenia (ale dopiero po poprzednich)

Transducers

https://www.youtube.com/watch?v=6mTbuzafcII

Jeszcze mocniejsze uogólnienie reducerów – tym razem oprócz kolekcji te same funkcje mogą przetwarzać kolekcje, wszelkiej maści strumienie zdarzeń, kanały core.async.

Clojurescript

https://www.youtube.com/watch?v=tVooR-dF_Ag

Tutaj ogłosili ClojureScript – dość długa prezentacja a w niej cały design i ideologie jaka stoją za tym (np. clojure-in-clojure – strukury danych i kompilator, dlaczego nie planują 100% zgodności z clojure on JVM itd.).

The Functional Final Frontier: https://www.youtube.com/watch?v=DMtwq3QtddY

Bardzo ciekawa prezentacja jak zaprzęgnąć elementy programowania funkcyjnego i immutable data structures w programowanie GUI działającego w przeglądarce (jedna immutable struktura danych definiująca całe GUI i możliwość ‚przerysowania’ tylko zmienionych elementów UI dzięki wykorzystaniu immutable/persistent data structures)

The Database as a Value

http://www.infoq.com/presentations/Datomic-Database-Value

Dość nowatorskie podejście do przechowywania danych – coś w rodzaju ‚immutable database’ – wersjonowana baza danych w której w każdej chwili można się cofnąć w czasie do dowolnego momentu i kosztuje to tyle samo co odczytanie bieżącego stanu bazy (+ jak to wykorzystać do wsparcia transakcji).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *