Esta conferencia fue dictada originalmente durante la 3ra Campus Party en Bogotá (2010). En ella se muestra cómo la JVM presenta al desarrollador con un abanico de lenguajes que van más allá de Java. Se hace una breve introducción a Jython, JRuby, Scala y Clojure, mostrando cómo el uso de estos lenguajes dinámicos puede simplificar la creación de programas, su utilidad como lenguajes de scripting o de “pegamento”, y la sencillez con la que se puede establecer una relación simbiótica con Java y sus librerías.
Herramientas que posibilitan la información y la investigación.pdf
Lenguajes Dinámicos en la Java Virtual Machine
1. Lenguajes Dinámicos
en la
Java Virtual Machine
Por: Óscar López, M.Sc.
olopez@heinsohn.com.co
2. Lenguajes Dinámicos
• Permiten realizar en ejecución labores que
en otros lenguajes se hacen en compilación
• Sistema de tipos dinámicos (*)
• Programación funcional
• Meta-programación y reflexión
• Scripting, “pegamento”, prototipos
• Edit-compile-test vs. read-eval-print
• ¡Es una definición subjetiva!
OALP-2010 All Rights Reserved 2
3. Java Virtual Machine
• Implementación en software de una máquina
física
• Portabilidad entre múltiples plataformas, no
depende específicamente de Java
• Ejecuta un lenguaje intermedio – bytecode
• Es una máquina de pila
• Manejo de memoria, verificador de clases,
excepciones, seguridad, hilos, GC, JIT
• ¡Puede implementar otros lenguajes!
• JSR 223 (Scripting, Java 1.6), JSR 292
(invokedynamic, Java 1.7), Da Vinci Machine
OALP-2010 All Rights Reserved 3
4. Lenguajes en la JVM
• Ada • Lisp (Clojure)
• AspectJ • Lua
• AWK • OCaml
• C • Oberon
• Cobol • Pascal
• ColdFusion • PHP
• Forth • Python (Jython)
• Groovy • Rexx
• Java • Ruby (JRuby)
• JavaFX Script • Scala
• JavaScript (Rhino) • Scheme
• LOGO • Tcl
OALP-2010 All Rights Reserved 4
7. Jython: Características
• Implementación 100% Java del lenguaje Python,
versión 2.5 (con algunas diferencias)
• Uso transparente de cualquier clase en Java
• Compilación a bytecode estática o dinámica
• Propiedades tipo bean
• Multi-hilos, resuelve el problema del GIL
• Usa el GC de Java, no conteo de referencias
• Desempeño depende de la JVM, pero en general
es más lento que CPython ó Java
• Atrasado respecto a CPython (2.7.0 RC, 3.1.2), no
puede usar módulos escritos en C
OALP-2010 All Rights Reserved 7
8. Jython: Casos de Uso
• Permite correr frameworks populares en
Python, como Django, Pylons, SQLAlchemy
• Lenguaje de scripting del WebSphere
Application Server
• Parte de las herramientas de desarrollo de
IBM Rational
• Lenguaje de programación de JHepWork,
un framework para análisis de datos
• Generación de pruebas de carga en The
Grinder
OALP-2010 All Rights Reserved 8
11. JRuby: Características
• Implementación 100% Java del lenguaje
Ruby, versión 1.8.7 (con algunas diferencias)
• Puede correr en modo interpretado o
compilado (AOT, JIT)
• Multi-hilos, no GIL, usa el GC de Java
• Mejor desempeño que la implementación
de referencia de Ruby 1.8 (pero no mejor
que Ruby 1.9)
• Permite usar librerías escritas en C, siempre
y cuando estén empacadas como gems.
OALP-2010 All Rights Reserved 11
12. JRuby: Casos de Uso
• Permite correr frameworks populares en
Ruby, como Rake (make), RubyGems
(paquetes)
• Desde sus inicios tuvo como objetivo
soportar por completo Ruby on Rails
• Las aplicaciones web de RoR pueden ser
desplegadas en Tomcat, Glassfish, etc.
• Igualmente, se pueden desplegar
aplicaciones JRuby en Google App Engine
OALP-2010 All Rights Reserved 12
15. Scala: Características
• Multiparadigma, diseñado para ser escalable; ¡lo
mejor de dos mundos!
• Modelo de compilación similar a Java, bytecode
casi idéntico al de Java
• OO puro: todos los valores son objetos, clases,
traits (con herencia dinámica, múltiple)
• Funcional: continuaciones, funciones anónimas y
anidadas, laziness, pattern matching, tail call (*)
• Sistema de tipos estáticos, genericidad, inferencia
de tipos (*)
• Modelos de concurrencia: Actores, CSP
OALP-2010 All Rights Reserved 15
16. Scala: Casos de Uso
• Twitter ha migrado buena parte de su
backend de Ruby a Scala
• Lift, un framework de aplicaciones web
similar a RoR. Puede desplegarse sobre
cualquier contenedor web
• Foursquare (red social + localización) usa
Lift
• Wattzon (energía, medio ambiente) está
hecho completamente en Scala
OALP-2010 All Rights Reserved 16
19. Clojure: Características
• Un dialecto moderno de Lisp
• Multiparadigma, aunque favorece el estilo
funcional de programación
• Lenguaje compilado, produce bytecode
• El código se puede tratar como datos
• Tipos dinámicos, inferencia de tipos
• Tail call limitada, por medio del operador recur
• Multimétodos, secuencias lazy
• Cuenta con un poderoso sistema de macros
• Modelos de concurrencia: agentes reactivos, STM
OALP-2010 All Rights Reserved 19
20. Clojure: Casos de Uso
• Compojure ó Conjure como frameworks
para aplicaciones web
• Clojure Contrib: extenso conjunto de
librerías y utilidades
• FlightCaster (predicción de demoras en
vuelos)
• Usado en Europa en aplicaciones del sector
salud, finanzas y energía
OALP-2010 All Rights Reserved 20