Какова самая производительная шепелявость на JVM

Какова самая производительная (самая быстрая) реализация шепелявости на JVM? Реализацией шепелявости я рассматриваю все реализации любого языка в семействе шепелявости, как язык Common LISP, Схема, Clojure...

Я знаю, что Clojure может быть сделан довольно быстрыми подсказками типа использования, что ABCL в целом не считается быстрым. Я не имею опыта с помощью любой Схемы на JVM, но слышал, что Kawa довольно быстр также.

11
задан Marko 29 July 2010 в 21:26
поделиться

3 ответа

С Clojure вы можете достичь скорости Java (с подсказками типов, конечно) и не можете стать быстрее java (за исключением некоторых очень редких случаев). Я не знаю, как насчет других лисперов, которые, возможно, имеют такую же скорость, но не быстрее.

Итак, что касается стандартной скорости вызовов и так далее.

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

Чтобы сделать структуры данных быстрее, Рич изобрел переходные структуры, которые делают их изменяемыми таким образом, что они остаются функциональными (и намного быстрее), и он уже работает над следующей большой вещью (читайте о разговоре Рича в лагере Emerging Languages).

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

Итак, следующая вещь - математика. В JVM есть три уровня скорости. Математика с boxed Types, primitiv Types с проверкой переполнения, или без проверки переполнения. Clojure предоставляет все эти возможности, так что ограничений нет.

Следующий момент - насколько быстро вы можете работать с Java, если вам придется использовать обертки, вы не сможете работать так же хорошо, а вызовы java часто используются в большинстве языков JVM. Чтобы реализовать clojure в clojure, clojure нужно было добавить конструкцию низкого уровня, чтобы вы могли взаимодействовать с java без каких-либо накладных расходов.

Поэтому clojure настолько быстр, насколько это возможно на JVM.

P.S.

Протоколы - это что-то вроде очень быстрых мультиметодов, которые не являются универсальными, но диспетчеризируются достаточно быстро, чтобы использовать их в ядре clojure (и таким образом больше не зависеть от java). Посмотрите их, они очень крутые.

12
ответ дан 3 December 2019 в 04:12
поделиться

Я буду удивлен, если это не clojure. Ни в одном другом известном мне JVM-лиспе не было уделено столько внимания производительности. Самым быстрым Scheme, вероятно, является SISC - он скомпилирован в формат FASL, но все же не является "родным" уровнем инструкций JVM.

3
ответ дан 3 December 2019 в 04:12
поделиться

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

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

Короче говоря: я голосую за Clojure :)

9
ответ дан 3 December 2019 в 04:12
поделиться
Другие вопросы по тегам:

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