lisp - how - ¿Cuál es su opinión sobre Clojure?
save and exit vim linux (10)
¿Qué piensan ustedes acerca de Clojure? Estoy pensando en aprenderlo a continuación, actualmente estoy usando Erlang y en general estoy contento con él, excepto con el fracaso de los registros ... ¿Clojure es tan poderoso como LISP?
"Clojure tiene el potencial para hacer programación orientada a la concurrencia lo que hace Java para la programación orientada a objetos hace una década: simplificar el uso adecuado de un lenguaje (o, en el caso de Clojure, un" entorno de lenguaje ") que es similar a a lo que los programadores ya están acostumbrados ". - Bill Clementson
Y la gente, LISP consiste en una familia de lenguajes de programación. Hay dialectos de Lisp como Common Lisp y Clojure. Y además de eso, hay muchas implementaciones de Common Lisp o Scheme.
Clojure es un dialecto de LISP, así que sí, es tan poderoso como LISP.
Por ninguna otra razón que no sea que ahora tenemos una buena herramienta LISP para JVM, me gusta este lenguaje.
Creo que el nombre es inteligente.
Considera aprenderlo. Si no es por otra razón, porque realmente puede usarlo en un proyecto real.
You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.
Me gusta Common Lisp mejor que Clojure porque la sintaxis es más regular y no está relacionada con las horribles (en mi humilde opinión) API de Java.
Para Common Lisp también tengo la opción de elegir entre varias implementaciones excelentes y bien probadas y un estándar maduro en el que confiar.
Pero si tuviera que usar Java para un trabajo, definitivamente consideraría usar Clojure. :)
A lo que te refieres Lisp-1 vs Lisp-2 es la pregunta de si las funciones y las variables comparten el mismo espacio de nombre. En Lisp-1 Lisps, como Scheme y Clojure, lo hacen. En Lisp-2 Lisps, como Common Lisp, no lo hacen. Esto es principalmente una cuestión de gusto y / o conveniencia, no afecta la potencia del lenguaje de programación.
Como ejemplo, en Clojure puedes hacer esto:
(defn my-apply [func arg1 arg2]
(func arg1 arg2))
Esta es una función que toma una función y dos valores y aplica la función a los valores. Por ejemplo:
user=> (my-apply + 1 2)
3
En Common Lisp, tendrías que escribir esto como
(defun my-apply (func arg1 arg2)
(funcall func arg1 arg2))
La razón por la que necesita "funcall" es que, dado que "func" está en el espacio de nombre de variables, no puede usarlo directamente como una función, como puede hacerlo en Clojure, que no hace esta distinción. Entonces debe decirle a Common Lisp "interprete esta variable como una función y llámela con estos argumentos". Otra consecuencia de esto es que para obtener el mismo resultado debe llamar a "my-apply" de esta manera:
=> (my-apply #''+ 1 2)
3
Aquí el problema se invierte: "+" es una función, pero desea pasarla como una variable, por lo que debe "convertirla". "# ''+" es la abreviatura de "(función +)", por cierto.
Utilicé Erlang en el trabajo para realizar pruebas coordinadas de carga de red y fue perfecto para eso porque el problema estaba dentro del "punto óptimo" de Erlang de "hacer el software orientado a la comunicación distribuida correctamente". Encuentro Clojure MUCH mejor para el código que necesita hacer algo complejo en una sola caja con varios hilos (este es un escenario más común).
Estás adelantado porque conoces Erlang y esto te ayudará a detectar los problemas en los que realmente brilla. ¿Qué crees que Clojures es realmente el "punto dulce"?
Yo uso Clojure y no CL porque:
- Se comunica bien con Java, por lo que puedo externalizar mi codificación
- Tiene acceso a los trillones de bibliotecas de Java que hacen todo tipo de cosas, incluyendo Swing y Weka.
- Como se ejecuta en la JVM, puede suponer con más seguridad que su problema funcionará en todas partes.
- Si puede mostrar las mismas bibliotecas que se utilizan con mucho menos código, puede convertir programadores Java a la forma lambda
- Y, lo más importante, no me ata a Emacs
: wq
Clojure es un Lisp-1, sí. Piense en ello como un Common Lisp más agradable sin todo el bagaje histórico. También tiene varias características de concurrencia modernas como STM y Agentes (decidieron no implementar el modelo de actores de Erlang). La ventaja de ejecutar en JVM es simple: ya hay tantas bibliotecas escritas para ello (principalmente en Java).
Clojure in Clojure es un esfuerzo continuo para reescribir el compilador Clojure en Clojure, para hacerlo más portátil y mantenible. Además de core.clj, la mayor parte de Clojure está escrita en Java actualmente. Después de este movimiento, será posible portarlo a MUCHAS máquinas virtuales, incluido Parrot.
lo que quiero decir con "es Clojure tan poderoso como LISP" es que leo en algún lugar aquí en que Common Lisp es lisp-2 y Clojure es lisp-1? (Fácilmente podría estar divagando aquí) ...
en lo que respecta a la concurrencia, me gusta mucho la historia de Erlang, ya que es muy fácil distribuir aplicaciones escribiéndolas en el modelo Actor.
del creador de Clojure en http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1
"Incluso con los actores, Clojure aún no tendrá una historia de concurrencia distribuida, pero estoy considerando la posibilidad de adoptar Erlang al por mayor, utilizando Jinterface para Clojure <-> Clojure o incluso Clojure <-> procesos distribuidos Erlang. Tal vez eso se vea como Termite cuando está hecho. Estén atentos ".