visual studio microsoft español descargar community java scala functional-programming clojure performance

java - studio - ¿Hay algún buen punto de referencia de Clojure?



visual studio installer (5)

Clojure nunca podrá hacer coincidir un programa Scala que aproveche al máximo la mutabilidad en un algoritmo que se beneficie de él. 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.

Entonces, si quieres (principalmente) inmutabilidad y 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.

Editar: Los puntos de referencia Clojure están arriba en el juego de puntos de referencia .

He hecho esta pregunta wiki de la comunidad e invito a otros a mantenerla actualizada.

¿Alguien conoce los puntos de referencia del desempeño de Clojure?

He hecho algo mío (aunque nada demasiado formal) y no fue muy bueno 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 una discusión en el foro del juego de comparaciones de idiomas de computadora sobre cómo agregar Clojure allí, pero aún no se ha hecho nada.

Editar: voy a seguir añadiendo a esto a medida que encuentre más:

@igouy señaló que los guiones de referencia para clojure están siendo creados por jafingerhut en github.

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

Y por separado, estas publicaciones de blog:

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

La mayoría de estas discusiones me llevan a pensar que el rendimiento de Clojure es muy favorable en comparación con otros lenguajes que se ejecutan en la JVM, aunque no hay duda de que puede ser muy difícil llegar a una conclusión amplia al comparar idiomas porque su rendimiento puede variar drásticamente depende de la tarea.

Editar:

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


Esta es una pregunta importante sobre la que todo el mundo piensa 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 este hilo . 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".

Una gran pregunta para hacerte una pregunta es si Java es lo 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.


Para preguntas de rendimiento, consulte este blogpost:

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

Esto muestra una implementación de Clojure del desafío WideFinder2, que es más rápida que Java, Scala y una sola rosca C. Compare con los tiempos oficiales.

Respecto a la observación de Daniels de que Clojure nunca será más rápido, vemos que obviamente es incorrecto en base a 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, al mismo tiempo que te permite mantener una base de código simple, elegante y robusta, casi una combinación única.


También te puede interesar la serie concur.next de Tim Bray. Él discute algunos problemas de rendimiento.


Ver jafingerhut / clojure-benchmarks

iirc la implementación actual de clojure no se ha centrado en el rendimiento, pero la próxima versión supuestamente lo hará.