2010-07-29 23 views
9

¿Cuál es la implementación de lisp más rápida (más rápida) en la JVM? Mediante la implementación de lisp, considero todas las implementaciones de cualquier idioma en la familia Lisp, como Common Lisp, Scheme, Clojure, ...¿Cuál es el ceceo con mayor rendimiento en la JVM

Sé que Clojure se puede hacer bastante rápido con sugerencias de tipo, que ABCL en general no se considera ser rápido. No tengo experiencia en el uso de ningún Scheme en JVM, pero escuché que Kawa es bastante rápido también.

Respuesta

10

Con Clojure puede obtener la velocidad de Java (con sugerencias de tipo, por supuesto) y no puede obtener más rápido que Java (excepto en algunos casos muy raros). No sé si los otros ceceos son quizás la misma velocidad pero no más rápidos.

Eso dice sobre la velocidad estándar de las llamadas, etc.

Clojure tiene estructuras de datos que no siempre son lo más rápidas posibles, pero realmente lo compensan con otras propiedades como seguridad de hilo, lectura inmutable y rápida.

Para hacer que las estructuras de datos sean más rápidas Rich inventó los transitorios y los hizo mutables de manera que siguen siendo funcionales (y son mucho más rápidos) y ya está trabajando en la siguiente gran cosa (lee sobre el campamento Emerging Languages hablar de ricos).

Es mucho más fácil escribir código simultáneo con clojure para que realmente se importe para hacer programas rápidos.

Así que lo siguiente es matemática. Hay tres niveles de velocidad en la JVM. Matemáticas con tipos en caja, primitiv Tipos con comprobación de desbordamiento, o sin verificación de desbordamiento. Clojure proporciona todos esos así que no hay límite allí.

Así que lo siguiente es qué tan rápido puede trabajar con Java, si tiene que usar envolturas no funcionará tan bien y las llamadas a Java se utilizan a menudo en la mayoría de los lenguajes JVM. Para implementar clojure en clojure, clojure necesitaba agregar un constructo de bajo nivel para que pudieras interactuar con java sin ningún tipo de sobrecarga.

Por lo tanto, clojure es más rápido que en la JVM.

P.S.

Los protocolos son como multimethods realmente rápidos que no son tan genéricos, pero el envío es lo suficientemente rápido como para usarlos en clojure core (y por lo tanto ya no dependen de java). Búscalos son geniales.

9

no hay muchos buenos datos, aunque this y algunos otros parecen indicar lo obvio. Los idiomas inmutables sufren levemente cuando realizan tareas no inmutables, y los lenguajes no inmutables sufren al realizar tareas altamente paralelas.

Al considerar estas preguntas, es útil tener en cuenta la "opción de recuperación". Clojure puede recurrir a java en busca de cualquier parte de tu código que el generador de perfiles te indique que no está tirando de su poder.

en resumen: yo voto clojure :)

3

Me sorprendería si no es clojure. Ningún otro ceceo de JVM que conozco ha prestado tanta atención al rendimiento. El esquema más rápido es probablemente SISC: está compilado en un formato FASL, pero aún no es un nivel de instrucción JVM "nativo".

+1

SISC significa "Segundo * intérprete * del código de esquema", para un intérprete su rendimiento se considera bastante bueno, pero es definitivamente más lento que kawa, que se compila directamente en bytecode y también admite sugerencias de tipo.Sin embargo, una comparación entre el rendimiento de clojure y kawa podría ser interesante. –

Cuestiones relacionadas