Какой самый эффективный шут на JVM - PullRequest
11 голосов
/ 30 июля 2010

Какая самая быстрая (самая быстрая) реализация lisp в JVM?При реализации lisp я рассматриваю все реализации любого языка в семействе lisp, такие как Common Lisp, Scheme, Clojure, ...

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

Ответы [ 4 ]

12 голосов
/ 30 июля 2010

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

Так, что сказано о стандартной скорости вызовов и т. Д.

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

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

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

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

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

Таким образом, clojure работает так же быстро, как на JVM.

PS

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

9 голосов
/ 30 июля 2010

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

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

короче: я голосую clojure:)

3 голосов
/ 30 июля 2010

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

1 голос
/ 30 мая 2018

За последние несколько недель я тестировал различные гадости. Kawa - самая быстрая реализация JVM, которую я до сих пор пробовал с точки зрения времени запуска, времени отклика REPL и выполнения основных сценариев. Автор опубликовал некоторые статистические данные о производительности в 2010 году, которые показывают, что Kawa превосходит Clojure с явным отрывом. YMMV.

http://per.bothner.com/blog/2010/Kawa-in-shootout/

...