Подтвердить что ты не робот

Хороший пример concurrency Java vs. Clojure

Clojure называется языком, который облегчает многопоточное программирование.

На веб-сайте Clojure.org:

Clojure упрощает многопоточность программирование несколькими способами.

Теперь я ищу нетривиальную проблему, решаемую на Java и в Clojure, поэтому я могу сравнить/сравнить их простоту. Кто-нибудь?

4b9b3361

Ответ 1

Я бы предложил также посмотреть на Christophe Grand потоковая блокировка очереди блокировки; это менее 20 строк, но обладает большой функциональностью и, на мой взгляд, демонстрирует экспертное использование некоторых функций Clojure concurrency, неизменяемости, атомов и ленивых последовательностей.

Учтите, что альтернатива Java java.util.concurrent.LinkedBlockingQueue составляет 842 строки тонкого (возможно сложного) кода с комментариями, и вы начинаете понять, как Clojure действительно выполняет обещание concurrency; значительно повышая уровень абстракции и обеспечивая правильную реализацию с кодом примерно на 10-20 раз.

Вы также заметите, что при чтении кода Java очень сложно увидеть лес для деревьев... Если бы вам дали, вы могли бы быть уверены в его правильности, посмотрев на него? Также имейте в виду, что этот код был написан Дугом Ли (возможно, главным экспертом по Java Concurrency) и предназначен для Java-чтения; Я очень сомневаюсь, что могу быстро написать читаемый код исполнителей, например, на Java, и убедиться в его правильности.

Контрастируйте это с версией Clojure и когда-то знакомым с основами Clojure, легко разобрать и понять, как это работает... В течение 20 минут я смог понять каждую строку реализации и быть уверен в своей правильности. И теперь, когда я больше знаком с Clojure идиомами и FP, я думаю, теперь это приблизит меня к 5 минутам. Вероятно, я также смогу написать "правильный" код, как это, в Clojure в часах или минутах.

Christophes clojure wrapper вышеупомянутого класса Java также поучительно, поскольку он имеет тот же функциональный интерфейс, что и первая версия.

Ответ 2

Проект Wide Finder, начатый Тимом Брейем, содержит несколько записей Clojure - наиболее заметным из которых является Alex Osborne; он сделал фантастическую запись на нем, а также записи в Java, Scala и внушительное количество других языков.

Решенная проблема является достаточно практичной и довольно интересной, как проблема параллелизации и публикации Тима об этом (см. также более поздний

Ответ 3

Посмотрите Пример Rich Hickey Ants - он показывает, как использовать функции clojure для создания параллельных программ