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ęść 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).