2010-07-29 5 views
9

Что такое наиболее эффективная (самая быстрая) реализация lisp на JVM? С помощью lisp-реализации я рассматриваю все реализации любого языка в семействе lisp, например Common Lisp, Scheme, Clojure, ...Что является наиболее эффективным lisp на JVM

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

ответ

10

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

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

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

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

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

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

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

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

P.S.

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

9

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

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

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

3

Я был бы удивлен, если это не Clojure. Ни один другой JVM lisp, о котором я знаю, так же сильно увлекся работой. Самая быстрая схема, вероятно, SISC - она ​​скомпилирована в формате FASL, но все же не является «родным» уровнем JVM-инструкции.

+1

SISC означает «Second * Interpreter * of Scheme Code», для интерпретатора его производительность считается неплохой, но ее определенно медленнее, чем kawa, которая компилируется непосредственно на байт-код, а также поддерживает подсказки типов.Однако может быть интересно сравнение между выступлением clojure и kawa. –