Your SlideShare is downloading. ×
  • Like
Lenguajes Dinámicos en la Java Virtual Machine
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Lenguajes Dinámicos en la Java Virtual Machine

  • 468 views
Published

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. …

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.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
468
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
5
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Lenguajes Dinámicos en laJava 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
  • 5. Ejemplo: Torres de Hanoi OALP-2010 All Rights Reserved 5
  • 6. OALP-2010 All Rights Reserved 6
  • 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
  • 9. Jython: Ejemplo OALP-2010 All Rights Reserved 9
  • 10. OALP-2010 All Rights Reserved 10
  • 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
  • 13. JRuby: Ejemplo OALP-2010 All Rights Reserved 13
  • 14. OALP-2010 All Rights Reserved 14
  • 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
  • 17. Scala: Ejemplo OALP-2010 All Rights Reserved 17
  • 18. OALP-2010 All Rights Reserved 18
  • 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
  • 21. Clojure: Ejemplo OALP-2010 All Rights Reserved 21
  • 22. BibliografíaJava1. http://en.wikipedia.org2. http://java.sun.com/developer/technicalArticles/D ynTypeLang3. http://andrei.gmxhome.de/bytecode/index.html4. http://openjdk.java.net/projects/mlvm5. http://www.is-research.de/info/vmlanguagesJython6. http://www.jython.org7. http://pydev.org8. http://www.jython.org/archive/21/docs/differences .html OALP-2010 All Rights Reserved 22
  • 23. Bibliografía (cont.)JRuby9. http://jruby.org10. http://www.aptana.com/products11. http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby12. http://kenai.com/projects/jruby/pages/DifferencesBetween MriAndJruby13. http://www.igvita.com/2009/09/23/deploying-jruby-on- google-app-engineScala14. http://www.scala-lang.org15. http://www.assembla.com/wiki/show/scala-ide16. http://www.artima.com/scalazine/articles/steps.html17. http://programming-scala.labs.oreilly.com OALP-2010 All Rights Reserved 23
  • 24. Bibliografía (cont.)Clojure18. http://clojure.org19. http://code.google.com/p/counterclockwise20. http://clojure.org/compilation21. http://en.wikibooks.org/wiki/Clojure_Programmin g/Tutorials_and_Tips22. http://kotka.de/blog/2010/02/gen- class_how_it_works_and_how_to_use_it.html23. http://www.ibm.com/developerworks/opensource /library/os-eclipse-clojure/index.html24. http://java.ociweb.com/mark/clojure/article.html OALP-2010 All Rights Reserved 24
  • 25. Preguntas OALP-2010 All Rights Reserved 25