Есть ли какие-либо хорошие сравнительные тесты Clojure?

Править: Сравнительные тесты Clojure произошли на Игре Сравнительных тестов.

Я сделал это сообщество вопроса Wiki и приглашаю других держать его в курсе.


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

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

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

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

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

Два очень соответствующих потока от дискуссионной группы Clojure:

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

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

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

Править:

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

33
задан 12 revs, 2 users 99% 23 May 2017 в 11:48
поделиться

5 ответов

См. jafingerhut / clojure-benchmarks

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

11
ответ дан 27 November 2019 в 19:30
поделиться

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

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

8
ответ дан 27 November 2019 в 19:30
поделиться

Я думаю, вы можете смело предположить, что size _ type является неотрицательным целым числом без знака. Ты не можешь полагаться на многое сверх этого. Конечно, большинство контейнеров имеют размер _ тип , который совпадает с размер _ t , но нет никаких гарантий.

Документация SGI и этот источник http://www.cplusplus.com/reference/stl/vector/ , похоже, согласны по этому вопросу.

Вы также можете взглянуть на это решение своей проблемы: http://rosettacode.org/wiki/Loop_over_multiple_arrays_simultaneously#C.2B.2B

Надеюсь, это поможет.

-121--3159588-

Если вы хотите, чтобы сам массив был const:

FP const a[] =
    {
        func1,
        func2,
        func3
    };
-121--2702135-

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

2
ответ дан 27 November 2019 в 19:30
поделиться

Я ответил на это здесь: Как передать данные в любой шаблон из любого ракурса в Джанго?

Также см. комментарии к моему ответу... Тебе тоже может понадобиться эта информация.

-121--5044516-

См. http://php.net/manual/en/function.set-time-limit.php

set_time_limit($seconds)

Если для параметра $ second установлено значение 0 , ограничение по времени не накладывается. Обратите внимание, что вы должны быть осторожны при полном снятии ограничения по времени. Вы не хотите, чтобы бесконечные циклы медленно съедали все ресурсы сервера. Верхний предел, например 180 , лучше, чем не предел.

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

$default = ini_get('max_execution_time');
set_time_limit(1000);
... some long running code here ...
set_time_limit($default);
-121--3509303-

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

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

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

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

1
ответ дан 27 November 2019 в 19:30
поделиться

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

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

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

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

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

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

8
ответ дан 27 November 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: