style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

El lenguaje de programación Kawa

Si bien es cierto que Clojure es la mas reciente implementación de un dialecto de Lisp para la JVM y la que más popularidad ha ganado en los últimos años. No ha sido la única. Y tiene características que se originaron en otras implementaciones anteriores. De estas existen por lo menos dos que merecen ser mencionadas:

  • Kawa (Scheme)
  • ABCL (Armed Bear Common Lisp)

De ABCL espero tener oportunidad de escribir después. Por ahora, quiero comentar sobre Kawa.

Kawa es un lenguaje de programación para la plataforma Java.
Es una implementación de Scheme, que como tal, pertenece la familia de Lisp. La versión 1.0 apareció en septiembre de 1996.
Kawa tiene muchas características útiles, incluyendo una buena integración con Java.
Puede ser utilizado como un "lenguaje de scripting", pero incluye un compilador y todos los beneficios de un lenguaje de programación "real", incluyendo tipado estático opcional, de modo que los programas escritos en Kawa pueden ser tan eficientes como los escritos en Java.
Kawa es también una herramienta para implementar otros lenguajes de programación en la plataforma Java.
Ha sido utilizado en aplicaciones como el App Inventor for Android.
Kawa es software libre y es parte del proyecto GNU.

Algunas ligas de interés sobre Kawa:

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Jose Manuel

Orale!, estaba viendo el

Orale!, estaba viendo el ejemplo de javafx con Kawa, el desarrollo sin duda es mas rápido. Al menos en la construcción de la UI (creo que he dicho algo obvio). Se ve interesante, me gustaría probarlo ya que soy muy poco entendido con la programación funcional. ¿Que ventajas me da desarrollar en Kawa que no tenga en otros lenguajes que trabajen sobre la maquina virtual de java? Esa pregunta fue la primera que se me cruzo mientras leía.

Saludos.

Imagen de alcides

En mi opinión, las ventajas

En mi opinión, las ventajas que te puede dar Kawa sobre otros lenguajes que existen para la JVM serían:

  • Tener un lenguaje funcional de muy alto nivel pero que también te permite programar en cualquier otro paradigma (OO, procedural, estructurado, etc) de forma nativa.
  • Scheme te permite utilizar abstracciones de alto nivel (p.ej Funciones de Orden Superior, Continuaciones, Comprensiones) lo cual se traduce en que generalmente necesitas mucho menos líneas de código para completar la misma tarea que con otros lenguajes.
  • Es un dialecto de Lisp minimalista, simple y elegante que te permite aprender y aplicar conceptos importantes de programación (funcional y de otros paradigmas) de una forma clara y sencilla
  • Hasta donde yo sé, en modo interpretado es el mas rápido de los lenguajes "de scripting" en la JVM
  • Kawa compila directo a byte-code de Java y aunque por ser Scheme es un lenguaje dinámico, tiene especificación opcional de tipos estáticos lo cual le da un muy buen balance de características tanto estáticas como dinámicas. El compilador ha estado mejorándose desde 1996 (mas de 12 años) y es muy eficiente
  • Siendo Lisp, es homoicónico, y el código y los datos son la misma cosa lo cual es la base de su legendario sistema de macros el cual permite la creación de lenguajes de dominio específicos (DSL) de una manera natural
  • Como todo Lisp, tiene un sistema de lectura y evaluación de código (REPL) en tiempo real que te permite probar y evaluar el código de forma interactiva y con retroalimentación inmediata, de hecho Lisp fué el primer lenguaje con una shell interactiva
  • Para Swing se puede usar una sintaxis muy parecida (casi igual) a la que se usa con JavaFX lo cual permite construir UIs manualmente en forma mas sencila

Estas son algunas de las razones por las que en lo personal he elegido Kawa para mis proyectos personales.

Saludos.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">