Хороший пример параллелизма Java против Clojure - PullRequest
17 голосов
/ 26 мая 2010

Говорят, что Clojure - это язык, облегчающий многопоточное программирование.

С сайта Clojure.org :

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

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

Ответы [ 3 ]

13 голосов
/ 01 июня 2010

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

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

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

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

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

5 голосов
/ 27 мая 2010

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

Решаемая проблема является весьма практичной и довольно интересной как задача распараллеливания, и сообщения Тима об этом (см. Также более позднюю серию Wide Finder 2 ) довольно приятны для чтения (и имеют хорошее образование значение). Плюс текст Алекса действительно великолепен, пожалуйста, прочитайте его, даже если вы решите пропустить остальное. Он использует некоторые специфичные для Clojure функции (например, Atoms) наряду с вещами, перенесенными с Java, где он делает свою работу отлично и быстро ... На самом деле, было бы интересно просто показать, как он демонстрирует превосходное взаимодействие Clojure с Java.

В общем, я бы сказал, что, пожалуй, лучше начать с этого.

4 голосов
/ 26 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...