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

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

Изменить: Тесты Clojure находятся на в игре Benchmarks.

Я создал этот вики сообщества сообщества и приглашаю других, чтобы он обновлялся.


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

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

Был обсуждение на Компьютерные игры Benchmarks Game форум о добавлении Clojure, но ничего еще не сделано.

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

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

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

И отдельно, эти сообщения в блоге:

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

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

Edit:

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

4b9b3361

Ответ 1

См. jafingerhut/ clojure -benchmarks

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Обратитесь к clj-me.cgrand.net для многих методов оптимизации.

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

Ответ 4

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

Ответ 5

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

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

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

Все, что между ними, вероятно, не имеет значения в любом случае.