Clojure es un lenguaje de programación de
propósito general dialecto de Lisp. Hace un énfasis especial en el paradigma funcional, con el objetivo (entre otros) de eliminar la complejidad
asociada a la programación concurrente.
Clojure puede ser ejecutado sobre la Máquina
Virtual de Java y la máquina
virtual de la plataforma .NET, así como
compilado a JavaScript.
Ventajas de Clojure sobre otros
lenguajes
- El código en clojure es de 1 a 10 ordenes de
magnitud mas pequeño que en java, esto es, de 10 a 100 veces menos código.
- Recursión BIEN implementada
- Tiene una repl (Desarrollo dinámico con una
consola de evaluación)
- Funciones son objetos de primera clase
- Listas perezosas (podemos tener programados
TODOS los números naturales sin ningún problema de memoria)
- Amplio conjunto de Estructuras de datos,
vectores, mapas, listas, por mencionar algunos
- Produce código de la JVM
- Puedes utilizar Clases de Java para trabajar
con Clojure!
Características
Características del lenguaje
* Desarrollo dinámico con una consola de evaluación (en inglés, REPL: read
eval print loop).
*Representación de funciones como valores, y preferencia por la recursión y el uso de higher order funciones sobre de la alternación basada en efectos
secundarios.
*Números de precisión arbitraria, y representación literal de fracciones,
generadas en las divisiones no enteras.
*Secuencias con evaluación perezosa (los elementos
de la secuencia no se computan hasta que son necesarios, lo que permite
representar conjuntos infinitos en potencia).
*Sistema integrado de estructuras de datos persistentes e inmutables.
*Control del estado (conjunto de valores que puede adquirir
una entidad en el tiempo) en situaciones de concurrencia a través de sistemas
transaccionales, de agentes y mediante bindings locales.
*Interacción con java: al compilarse
a bytecode de
la JVM, las aplicaciones escritas en Clojure pueden ser
fácilmente integradas en servidores de aplicaciones u otros entornos Java con
escasa complejidad adicional. Se implementan por defecto todas las interfaces
posibles a nivel de clases, estructuras de datos y concurrencia para minimizar
los esfuerzos requeridos para conseguir esta portabilidad.
No hay comentarios:
Publicar un comentario