¿Para qué es útil Clojure? [cerrado]


100

¿Para qué aplicaciones del mundo real la gente usa Clojure?

Yo uso Groovy para cosas de pegamento, Java para sistemas grandes, scripts Python / Perl para analizar y pegar. Pude verme llamando a Clojure desde Java, pero no puedo ver dónde lo usaría por derecho propio. Me parece que sería más fácil usar casi cualquier lenguaje de programación para tareas ad hoc.

No soy un experto en Groovy o un fanboy de ninguna manera, pero me sorprende que tenga un mejor marco de soporte, herramientas y muchas de las construcciones del lenguaje (cierres, programación funcional). Lo mismo podría decirse de Scala.

¿Podría ser que su futuro sea como un lenguaje que está incrustado en otros sistemas?


23
Todo menos hacerme un sándwich.
Wheaties

12
@wheaties: ¿Lo has probado (sandwich me BLT)?
FrustratedWithFormsDesigner

3
¿Por qué no usarías Clojure también para "grandes sistemas"? ISTM que, al ser menos detallado que Java, sus sistemas no necesitarían ser tan grandes en Clojure. :-)
Ken

2
Mirando las respuestas, creo que la gente lo está usando para algunas cosas interesantes. Sin embargo, me pregunto cuántas empresas lo elegirán para el desarrollo a largo plazo.
Fortyrunner

1
Sé que ha pasado mucho tiempo, pero se necesita una mente aguda para programar en un lenguaje funcional. Las mentes agudas son caras, por lo que no sé sobre el potencial LTD de Clojure desde un punto de vista comercial, no hasta que se vuelva mucho más generalizado de lo que es incluso hoy (cinco años después).
Sean Allred

Respuestas:


93

He usado Clojure para:

  1. Raspado de páginas web
  2. Scripts de shell
  3. Construyendo sitios web
  4. Jugando con OpenGL
  5. Escribir servidores web asíncronos
  6. Plantillas HTML
  7. Ejecutar tareas paralelas (obtener varias URL y procesar en paralelo)
  8. Jugando con audio en tiempo real
  9. Simulaciones

Eso es lo práctico / divertido.

Pero Clojure también tiene mucha profundidad teórica. Ideas que serán cada vez más relevantes a medida que la corriente principal llegue a comprender realmente el potencial de la programación funcional.

Una opinión personal, pero Clojure proporciona a toda máquina mejores construcciones de lenguaje para organizar el software correctamente (sin causar un dolor indebido al programador que trabaja) de todos los lenguajes que he usado hasta ahora académica y profesionalmente: C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Lo que no quiere decir que Clojure sea perfecto. Pero me parece que está construido sobre una base mejor que la mayoría de lo que existe.


¿Eres David Nolen? el tipo que dio la charla sobre "Clojurescript: Lisp's Revenge". ¡Fue una charla increíble!
Amogh Talpallikar

1
//, ¿Qué quieres decir con "proporciona mejores construcciones de lenguaje para organizar el software correctamente"? Por ejemplo, dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese

2
@maSnun en el tiempo de inicio del hardware moderno es de alrededor de 1 segundo o menos. Esto está bien para los scripts de shell.
dnolen

1
@dnolen Gracias por tomarse el tiempo para responder. Soy un nuevo entusiasta de clojure y me toma como 20 segundos cuando intento ejecutar el archivo jar que creo con lein uberjar. Estoy en OS X, Macbook con core i5 y 16 GB de RAM. ¿Utiliza alguna optimización especial?
Masnun

5
@maSnun uberjars no son para scripts de shell, son para la implementación de aplicaciones. La optimización de aplicaciones es una cuestión general de JVM, nada específico de Clojure. Puede escribir scripts de shell hash bang con Clojure tan fácilmente como cualquier otro lenguaje de scripting y eso es lo que recomendaría.
dnolen


18

Clojure se usa ampliamente para procesar grandes volúmenes de datos. Es muy adecuado para la minería de datos / IA comercial (es decir, Runa) y predicciones a gran escala (también conocido como WeatherBill). La historia de concurrencia de Clojure realmente ayuda en estos dominios de datos pesados ​​donde el procesamiento paralelo es simplemente la única respuesta.


13

Bueno, esa es una pregunta difícil de responder. ¿Qué quieres hacer? No hay mucho para lo que Clojure no sea adecuado. Quiero decir, no es realmente bueno para scripts de línea de comandos únicos debido al tiempo de inicio de JVM (a menos que esté usando cake o algo similar), pero eso se puede decir para cualquier lenguaje de JVM.

Clojure es especialmente adecuado para tareas de concurrencia. Fue construido desde cero para ser un lenguaje increíble para la concurrencia, y su sistema STM es fantástico. Si necesita hacer algunas cosas relacionadas con la concurrencia, Clojure podría ser especialmente adecuado para esa tarea.

Sin embargo, uno debe recordar que Clojure es un lenguaje de propósito general. No solo es adecuado para ciertos nichos, y tiende a ser útil para muchas o todas las cosas para las que los otros lenguajes JVM podrían ser adecuados.

Clojure fue diseñado para ser un lenguaje fantástico por derecho propio, y no necesariamente un lenguaje adhesivo. Puede construir sistemas desde cero en Clojure sin tocar el código Java directamente. No es que no sea un buen lenguaje de pegamento, sé que mucha gente lo ha usado como tal.

Si tiene algo en mente, lo mejor que puede hacer es considerar cómo se vería la solución en los idiomas que sean opciones. Si se ve o se siente mejor en Groovy, elige Groovy. Ambos son lenguajes radicalmente diferentes y ambos tienen sus propósitos.


Incluso entonces me encontré escribiendo scripts CLI Clojure, solo porque encontré el lenguaje agradable de escribir y no me importaba el tiempo de inicio en mi caso.
nha

7

Puede usar Clojure en cualquier lugar donde use Groovy o java. Por qué querrías hacer eso ? A algunas personas les gusta cecear. Esos elegirán clojure sobre Groovy. A algunas personas no les gusta cecear. Aquellos elegirán Groovy.


2
No es solo una cuestión de elección, clojure tiene toneladas de características que ningún otro idioma tiene) de alguna manera nadie mencionó nada, apenas recuerdo charlas en conferencias, así que no podré escribir una respuesta adecuada aquí
holms
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.