2010-06-15 19 views
16

¿Alguien puede señalar las ventajas de Clojure y para qué tipo de aplicaciones es adecuada?Ventajas de Clojure

No tengo intención de compararlo con ningún idioma como tal. Como un lenguaje en sí mismo, ¿para qué es adecuado? Mi intención es conocer las herramientas adecuadas para el trabajo correcto, y dónde encaja Clojure en ese tipo de escenario.

+2

Las ventajas de clojure en comparación con qué? Lista común? ¿Esquema? ¿Java? – sepp2k

+3

http://clojure.org/rationale – msw

+0

@ sepp2k: probablemente se refería a LISP común – Max

Respuesta

10

En general me parece como puntos fuertes para clojure (en ningún orden particular):

1) de la réplica a probar las cosas de forma interactiva.

2) Todo es inmutable por defecto y la mutabilidad tiene varios patrones estándar bien escogidos para modificar el estado de una forma segura en un entorno multiproceso

3) recursión de cola se hace explícito. Hasta que exista un soporte adecuado para la recursividad final en la JVM, este es probablemente el mejor compromiso

4) Lenguaje muy expresivo que favorece un enfoque funcional sobre un enfoque imperativo.

5) Muy buena integración con la plataforma Java por lo que es indoloro para mezclar en las bibliotecas de Java

6) Leiningen como una herramienta de construcción y gestión de la dependencia junto con el sitio clojars

Ok, punto 6 no tiene nada que ver con el lenguaje en sí, pero definitivamente con mi placer de usarlo.

En cuanto a las aplicaciones que se dirige a las aplicaciones de subprocesos múltiples, pero son las cosas en este momento que podría significar cualquier cosa, como en todas partes la gente trata de mantener todos esos núcleos ocupados mientras el usuario está no de espera. Por otro lado, aparentemente mucha gente lo usa para implementar en Google App Engine, que es radicalmente SINGLE.

El enfoque funcional funciona bien en mi experiencia (limitada) para implementar transformaciones y cálculos de datos. Donde la información y los eventos se pueden 'transmitir' a través de la aplicación. Las aplicaciones web caen en gran medida bajo esta categoría donde "transformamos" una solicitud en una "respuesta".

Pero todavía tengo que usarlo en el código de producción real. Actualmente lo uso para proyectos personales y creación de prototipos/benchmarking.

17

Ventajas:

  • todos los beneficios de la programación funcional, sin la camisa de fuerza pureza
  • lispy: permite código dinámico, compacto con el enlace en tiempo, macros, métodos múltiples de interoperabilidad
  • Java de código
  • lata funciones para secuenciar abstracción en lugar de a estructuras de datos específicas
  • goodies concurrencia horneados en: estructuras de datos funcionales, software memoria transaccional
  • se ejecuta en la JVM: la portabilidad y la basura rápida recolección de

Adecuado para:

  • de abajo hacia arriba diseño
  • idiomas incrustados aplicaciones
  • altamente concurrentes

Probablemente no es adecuado para:

  • casos en los que desee tipos estáticos
  • si quieren que el lenguaje sea susceptible de análisis estático
  • todo lo que necesita un tiempo de inicio rápido
  • hordas de monos de Java despistados
+2

En cuanto a la tipificación fuerte: he tenido resultados decentes en Clojure 1.2 utilizando sugerencias de tipo hasta ahora. Creo que con un uso prudente puede obtener la mayoría de los beneficios de tipeo fuerte si realmente lo quieres ... – mikera

+4

Esta es una publicación anterior, pero solo decir que una tipificación fuerte no solo está aquí para el rendimiento. Después de todo, las últimas VM de Javascript son rápidas sin tipeo estático ni tipos. Inducen el tipo en tiempo de ejecución y código de recompilación en consecuencia Fuerte avance de tipeo es mejor soporte de herramientas El compilador encuentra muchos errores obvios, IDE ofrece refactorización asistida. Al inspeccionar el código, puede encontrar fácilmente a todos los llamantes de una función, toda la implementación de una interfaz ... el problema es más verbosidad y menos genericidad. –

+3

Me encanta la parte "hordas de monos Java desorientados". – Heejin