Dynamic jvm

1,702 views
1,593 views

Published on

CParty 2010

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,702
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Dynamic jvm

  1. 1. Lenguajes Dinámicos en la Java Virtual Machine Por: Óscar López, M.Sc. Twitter: @oscar_lopez
  2. 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. 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. 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. 5. Ejemplo: Torres de Hanoi OALP-2010 All Rights Reserved 5
  6. 6. OALP-2010 All Rights Reserved 6
  7. 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. 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. 9. Jython: Ejemplo OALP-2010 All Rights Reserved 9
  10. 10. OALP-2010 All Rights Reserved 10
  11. 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. 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. 13. JRuby: Ejemplo OALP-2010 All Rights Reserved 13
  14. 14. OALP-2010 All Rights Reserved 14
  15. 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. 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. 17. Scala: Ejemplo OALP-2010 All Rights Reserved 17
  18. 18. OALP-2010 All Rights Reserved 18
  19. 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 • Concurrencia: agentes reactivos, STM OALP-2010 All Rights Reserved 19
  20. 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. 21. Clojure: Ejemplo OALP-2010 All Rights Reserved 21
  22. 22. Bibliografía Java 1. http://en.wikipedia.org 2. http://java.sun.com/developer/technicalArticles/D ynTypeLang 3. http://andrei.gmxhome.de/bytecode/index.html 4. http://openjdk.java.net/projects/mlvm 5. http://www.is-research.de/info/vmlanguages Jython 6. http://www.jython.org 7. http://pydev.org 8. http://www.jython.org/archive/21/docs/differences .html OALP-2010 All Rights Reserved 22
  23. 23. Bibliografía (cont.) JRuby 9. http://jruby.org 10. http://www.aptana.com/products 11. http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby 12. http://kenai.com/projects/jruby/pages/DifferencesBetween MriAndJruby 13. http://www.igvita.com/2009/09/23/deploying-jruby-on- google-app-engine Scala 14. http://www.scala-lang.org 15. http://www.assembla.com/wiki/show/scala-ide 16. http://www.artima.com/scalazine/articles/steps.html 17. http://programming-scala.labs.oreilly.com OALP-2010 All Rights Reserved 23
  24. 24. Bibliografía (cont.) Clojure 18. http://clojure.org 19. http://code.google.com/p/counterclockwise 20. http://clojure.org/compilation 21. http://en.wikibooks.org/wiki/Clojure_Programmin g/Tutorials_and_Tips 22. http://kotka.de/blog/2010/02/gen- class_how_it_works_and_how_to_use_it.html 23. http://www.ibm.com/developerworks/opensource /library/os-eclipse-clojure/index.html 24. http://java.ociweb.com/mark/clojure/article.html OALP-2010 All Rights Reserved 24
  25. 25. Preguntas OALP-2010 All Rights Reserved 25

×