Есть ли хорошие тесты Clojure? - PullRequest
       14

Есть ли хорошие тесты Clojure?

33 голосов
/ 02 февраля 2010

Редактировать: Тесты Clojure включены в Игра тестов .

Я сделал этот вопрос вики-сообществом и приглашаю других обновлять его.


Кто-нибудь знает о тестах производительности Clojure?

Я сделал кое-что свое (хотя и не слишком формальное), и это не слишком хорошо по сравнению с другими функциональными языками (пробовал Haskell и OCaml). Но как это выглядит по сравнению с Java или другим языком в JVM (например, Scala)? И как это сравнить с другими Лиспами?

На форуме Games Benchmarks Game по поводу добавления Clojure было некоторое обсуждение , но пока ничего не сделано.

Редактировать: Я собираюсь продолжить добавлять к этому, как я нахожу больше:

@ igouy указал, что сценарии тестирования для clojure создаются jafingerhut на github.

Две очень важные темы из дискуссионной группы Clojure:

И отдельно эти посты в блоге:

И, наконец, связанный вопрос по stackoverflow:

Большинство этих обсуждений заставляют меня думать, что производительность Clojure очень благоприятна по сравнению с другими языками, работающими на JVM, хотя нет никаких сомнений в том, что при сравнении языков может быть очень сложно прийти к общему выводу, поскольку их производительность может существенно различаться в зависимости от задачи.

Edit:

Лау Дженсен только что опубликовал отличную дискуссию о бенчмаркинге с языками JVM в своем блоге: "Правильный бенчмаркинг" .

Ответы [ 5 ]

11 голосов
/ 03 февраля 2010

См. jafingerhut / clojure-ориентиры

iirc текущая реализация clojure не была сосредоточена на производительности, но следующая версия предположительно будет.

8 голосов
/ 06 февраля 2010

По вопросам производительности, пожалуйста, обращайтесь к этому посту в блоге:

http://meshy.org/2009/12/13/widefinder-2-with-clojure.html

Это показывает реализацию CloFure задачи WideFinder2, которая быстрее, чем Java, Scala и однопоточные C. Сравнитьс официальным временем.

Что касается замечания Дэниелса, что Clojure никогда не будет быстрее, мы видим, что это явно неверно на основе результатов выше.Изменчивость быстрее, чем неизменяемость, которая по умолчанию Clojures, но Clojure допускает локальные переходные процессы (то есть временно изменяемые данные), так что можно достичь оптимальной скорости.

В заключение: Clojure может быть настолько быстрым, насколько вам хотелось бы, и в то же время позволяет поддерживать простую элегантную и надежную кодовую базу, почти уникальную комбинацию.

8 голосов
/ 03 февраля 2010

Это важный вопрос, который почти каждый думает, прежде чем рассматривать clojure. Это также сложный вопрос даже для зрелых языков, в которых не добавляются такие вещи, как чанкованные последовательности, которые радикально изменяют производительность некоторых конкретных (хотя и распространенных) задач. Я нашел некоторые хорошие мысли в этой теме . Многие из найденных вами тестов будут связаны с предыдущими версиями java и clojure, поэтому вряд ли кто-нибудь сможет найти «действительно хорошие тесты».

Я задаю себе большой вопрос: Достаточно ли быстро работает Java . Это предварительное условие для того, чтобы clojure был достаточно быстрым. Если вы можете убедить себя в том, что ответ на этот вопрос положительный, тогда безопасно перейти к Clojure и реализовать части, которые ваше профилирование идентифицирует как узкие места в Java. Поскольку у вас есть язык возврата к ресурсам с хорошо известной производительностью, с Clojure обычно будет безопасно.

2 голосов
/ 04 февраля 2010

Вас также может заинтересовать серия concur.next от Tim Bray. Он обсуждает некоторые проблемы с производительностью.

1 голос
/ 04 февраля 2010

Clojure никогда не сможет подобрать программу Scala, которая в полной мере использует изменчивость алгоритма, который ей выгоден.Также существует тот факт, что Clojure является динамическим языком, который в настоящее время не очень хорошо поддерживается JVM.

С другой стороны, Clojure превосходно обеспечивает параллельные, асинхронные и распределенные алгоритмы, а также неизменяемые алгоритмы в целомговоря.

Итак, если вы хотите (в основном) неизменяемость и многоядерную эффективность, Clojure сделает это намного проще.Если ваши алгоритмы действительно очень нуждаются в интенсивном использовании изменчивости для эффективности, тогда Scala сделает это проще.

Что-нибудь промежуточное, скорее всего, не будет иметь значения в любом случае.

...