2010-05-26 13 views
17

Clojure jest językiem, który ułatwia programowanie wielowątkowe.Dobry przykład współbieżności Java kontra Clojure

Od strony Clojure.org:

Clojure upraszcza programowanie wielowątkowe na kilka sposobów.

Teraz szukam nietrywialnego problemu rozwiązanego w Javie i Clojure, dzięki czemu mogę porównać/skontrastować ich prostotę. Ktoś?

+0

Ładny blog opisujący funkcje: https: //perkss.github.io/#/clojure/ConcurrencyClojure # text-body – Matt

Odpowiedz

13

Proponuję również przyjrzeć się Christophe'owi Grandowi: thread safe blocking queue; Jest mniej niż 20 linii, ale ma wiele funkcjonalności i, moim zdaniem, demonstruje wykorzystanie niektórych funkcji współbieżności, niezmienności, atomów i leniwych sekwencji Clojure.

uważają, że alternatywą Java java.util.concurrent.LinkedBlockingQueue is 842 lines z subtelnym (zapewne kompleks) skomentował kod i zaczynasz rozumieć jak Clojure naprawdę nie dostarcza na jego współbieżności obietnicy; znacznie podnosząc poziom abstrakcji i dostarczając prawidłową implementację przy około 10-20 razy mniejszej ilości kodu.

Zauważysz również, że podczas czytania kodu Java naprawdę trudno jest dostrzec las dla drzew ... Jeśli dostałeś go, możesz być pewny jego poprawności, patrząc na niego? Należy również pamiętać, że ten kod został napisany przez Douga Lea (prawdopodobnie najważniejszego eksperta w dziedzinie Java Concurrency) i jest wysoce czytelny w języku java; Bardzo wątpię, czy mógłbym szybko napisać czytelny kod wykonawczy, taki jak ten, w Javie i mieć pewność jego poprawności.

Porównaj to z wersją Clojure i po zapoznaniu się z podstawami gry Clojure łatwo jest rozszyfrować i zrozumieć, jak to działa ... W ciągu 20 minut byłem w stanie zrozumieć każdą linię implementacji i być pewnym jej poprawność. A teraz, gdy jestem znacznie bardziej zaznajomiony z idiomami Clojure i FP, przypuszczam, że teraz zajmie mi to 5 minut. Prawdopodobnie byłbym też w stanie napisać "poprawny" kod w Clojure w ciągu kilku godzin lub minut.

Christophes clojure wrapper z powyższej klasy java jest również pouczający, ponieważ ma ten sam interfejs funkcjonalny co pierwsza wersja.

4

Proszę spojrzeć na Rich Hickey's Ants example - to pokazuje, jak korzystać z funkcji Clojure do budowania programów współbieżnych

+1

Czy istnieje również wersja Java tego? Szukam przykładów w obu językach, dzięki czemu mogę porównywać/kontrastować. –

+0

Pamiętam, że ktoś napisał wersję Java, ale nie mógł jej teraz znaleźć ... –

5

The Wide Finder Project, których autorem jest Tim Bray, posiada szereg zapisów Clojure - najbardziej zauważalną z nich jest Alex Osborne; zrobił na nim a fantastic write-up - a także wpisy w Javie, Scali i imponującej liczbie innych języków.

Problem rozwiązany jest całkowicie praktyczny i dość interesujący jako wyzwanie równoległe, a posty Tima na ten temat (patrz także nowsze serie Wide Finder 2) są całkiem przyjemne do czytania (i mają dobrą wartość edukacyjną). Tekst Alexa jest naprawdę świetny, przeczytaj go, nawet jeśli zdecydujesz się pominąć resztę. Korzysta z niektórych funkcji specyficznych dla Clojure (takich jak Atomy) oraz rzeczy przywiezionych z Javy, ponieważ szybko się to udało & ... W rzeczywistości, byłoby to interesujące tylko dla sposobu, w jaki prezentuje doskonałą interakcję Java Clojure.

Podsumowując, powiedziałbym, że to najprawdopodobniej najlepsza rzecz na początek.

Powiązane problemy