2010-02-02 11 views
34

Editar:Los puntos de referencia de Clojure están en the Benchmarks Game.¿Hay buenos puntos de referencia de Clojure?

He hecho esta wiki de comunidad de preguntas e invito a otras personas a mantenerla actualizada.


¿Alguien conoce los puntos de referencia del rendimiento de Clojure?

He hecho algo propio (aunque nada demasiado formal) y no fue muy bien en comparación con otros lenguajes funcionales (probé Haskell y OCaml). Pero, ¿cómo se ve en comparación con Java u otro idioma en la JVM (por ejemplo, Scala)? ¿Y cómo se compara con otros Lisp?

Hubo algunos discussion en el foro Computer Language Benchmarks Game sobre agregar Clojure allí, pero no se ha hecho nada.

Editar: Voy a seguir añadiendo a esto como yo he hallado más:

@igouy señaló que los guiones de referencia para clojure are being created por jafingerhut en github.

Dos hilos muy relevantes del grupo de discusión Clojure:

y por separado, estas publicaciones en el blog:

Y, por último, una pregunta relacionada en stackoverflow:

La mayor parte de estas discusiones me llevan a pensar que la actuación de Clojure es muy favorable en comparación con otros idiomas que se ejecutan en la JVM, aunque no hay duda de que puede ser muy difícil llegar a un amplio conclusión al comparar idiomas porque su rendimiento puede variar dramáticamente dependiendo de la tarea.

Editar:

Lau Jensen acaba de publicar una gran discusión sobre la evaluación comparativa con los lenguajes de JVM en su blog: "Getting benchmarking right".

+0

>> muy difícil llegar a una conclusión amplia << Así que intente una conclusión estrecha. – igouy

+0

Eso es muy cierto y aprecio lo difícil que puede ser, pero por otro lado no es del todo práctico saber que clojure funciona mejor para problemas de tipo x, mientras que "nombrar a tu otro idioma" funciona mejor para problemas de tipo y , etc.; en algún momento, necesita una heurística para elegir un idioma en función de su rendimiento "general", y "todo lo demás es igual", tengo que decidir si vale la pena la inversión. – Shane

+0

>> basado en su rendimiento "general", y "todo lo demás es igual" << ¿Incluso cuando parece que el rendimiento "general" es una ficción? – igouy

Respuesta

8

Esta es una pregunta importante que casi todos piensan antes de considerar clojure. También es una pregunta difícil incluso para lenguajes maduros que no agreguen cosas, como secuencias fragmentadas, que cambian radicalmente el rendimiento de algunas tareas específicas (aunque comunes). Encontré algunos buenos pensamientos en this thread. Muchos de los puntos de referencia que encuentre estarán relacionados con las versiones anteriores de java y clojure, por lo que es poco probable que alguien pueda encontrar "puntos de referencia realmente buenos".

La gran pregunta que debe hacerse aquí es ¿Es Java suficientemente rápido. Esta es una condición previa para que clojure sea lo suficientemente rápido. Si puede convencerse de que la respuesta a esta pregunta es sí, entonces es seguro proceder en Clojure e implementar las partes que su perfil identifica como cuellos de botella en Java. Debido a que tiene un lenguaje de failback con un rendimiento bien conocido, generalmente será seguro ir con Clojure.

2

Te puede estar interesado en la serie concur.next de Tim Bray. Él discute algunos problemas de rendimiento.

1

Clojure nunca será capaz de coincidir con un programa Scala que aproveche al máximo la mutabilidad en un algoritmo que se beneficie de ello. También está el hecho de que Clojure es un lenguaje dinámico, que, actualmente, no cuenta con el apoyo suficiente de JVM.

Por otro lado, Clojure se destaca por permitir algoritmos paralelos, asíncronos y distribuidos, y algoritmos inmutables en general.

Por lo tanto, si desea (principalmente) la inmutabilidad y la eficiencia multinúcleo, Clojure hará que sea mucho más fácil de lograr. Si sus algoritmos realmente, realmente necesitan usar mutabilidad para la eficiencia, entonces Scala los hará más fáciles.

Cualquier cosa en el medio, es probable que no importe de ninguna manera.

+4

clojure puede funcionar con matrices Java o la colección java y puede utilizar sugerencias tipo para que sea difícil pero es posible si REALMENTE lo necesita. – nickik

8

Por cuestiones de rendimiento por favor refiérase a esta entrada de blog:

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

Esto muestra una aplicación Clojure del desafío WideFinder2 que es más rápido que tanto Java, Scala y de un solo subproceso C. Comparar con tiempos oficiales.

En cuanto a Daniels, observe que Clojure nunca será más rápido, vemos que es obviamente incorrecto según los resultados anteriores. La mutabilidad es más rápida que la inmutabilidad, que es la predeterminada de Clojures, aunque Clojure permite transitorios locales (es decir, datos temporalmente mutables), de modo que se puede lograr una velocidad óptima.

Consulte clj-me.cgrand.net para obtener muchas técnicas de optimización.

En conclusión: Clojure puede ser tan rápido como quisieras y al mismo tiempo te permite mantener una base de código simple, elegante y robusta, casi una combinación única.

+4

¡Es una lectura interesante! No estoy seguro de que la conclusión de que "Clojure puede ser tan rápido como quisieras" se mantenga en ese punto de referencia. El autor hizo una gran optimización del código Clojure y admite que los mismos trucos funcionarían para Java y Scala (por ejemplo, ¡muchos de ellos evitaban el String.split de Java!). Habla más de las virtudes de la optimización repetida. Sin embargo, muestra que uno puede sentirse perfectamente cómodo con el uso de Clojure para una amplia variedad de tareas. –

Cuestiones relacionadas