lunes, agosto 07, 2006

Javastallk ?





Dinamic 292

Hay un antes y un después de JavaOne, y la verdad que esta brecha es muy grande, con noticias como la implementación de la JSR 299 (Web Beans), o tan locas como la liberacion de el core de Java. Pero sin dudas una de las noticias que me a puesto mas que contento es la de la implementación de la JSR 292.
Y que es la JSR 292?
Es la especificacion de Sun que planea extender la JVM para incluir soporte que permita la ejecución eficiente de lenguajes dinámicos ( del estilo Smalltalk ). Sun Digging Deep for Dynamic Language Support es el nombre elegante de esta iniciativa que ha tomado oficialmente la forma de JSR 292, sus promotores Gilad Bracha (Teólogo computacional) y Graham Hamilton ( que capo le queda chico..) en Sun. Fundamentalmente se trataría de incluir dos nuevas características a nivel de máquina virtual:



  • Una nueva instrucción: invokedynamic. Similar a la instrucción invokevirtual pero sin verificado de tipos. Sí hay chequeo de tipos, pero en vez de incluirse esta información de forma estática en el bytecode, la comprobación se hace de forma dinámica durante la ejecución.
Para hacerlo mas claro seria...
Usando invokevirtual

Object x;
...
x.equals("hello");
el compilador escribiría algo como...

aload_1 ; push de la variable local (i.e. 'x') dentro de la stack
ldc "hello" ; pone el string "hello" en el stack

; invocamos al método “equals”
invokevirtual java/lang/Object/equals(Ljava/lang/Object;)Z
; pone el resultado booleano en la pila
Ahora en el nuevo mundo de invokedynamic

Object x;
...
x.equals("hello");
el compilador escribiría algo como...

aload_1 ; push de la variable local (i.e. 'x') dentro de la stack
ldc "hello" ; pone el string "hello" en el stack

; invocamos al método “equals”
invokedynamic java/lang/Object/equals(L?;)?
; pone el resultado booleano en la pila
Donde ? son los tipos que seran descubiertos en tiempo de ejecución.
  • La posibilidad de hacer hotswapping. Modificación del código "al vuelo", es decir, sería posible añadir/quitar métodos, atributos etc..., en tiempo de ejecución. Esta posibilidad parece ser la más problemática de implementar, de hecho, el JSR no se moja al respecto y sólo afirma que hará todo lo posible.
La intención de Gilad sería poder incluir este JSR en la version Java SE 7 "Dolphin", pero antes tendrá que convencer a un sector importante dentro del mundo Java que ve en esta iniciativa un ataque directo a toda la filosofía Java basada en la programación estática, e incluso para el propio lenguaje Java. Para este sector el soporte previsto en Mustang para la ejecución de lenguajes de scripting desde código Java es lo más apropiado, donde además vendrá de serie un nuevo paquete con la implementación Rhino de JavaScript.

Por el contrario, sus partidarios piensan que la iniciativa está aún demasiado verde, y que para cuando vea la luz será demasiado tarde, y se temen también, que será demasiado reducida. Mientras tanto sería la plataforma .NET de Microsoft y su clon multiplataforma Mono el entorno más adecuado para el desarrollo de las nuevas iniciativas que involucran lenguajes dinámicos.
Esto viniendo de la mano por ejemplo de Visual Smalltalk ( que en la próxima entrega les voy a mostrar Jabber con Smalltalk y .Net )
Para las personas que miramos con mucha, mucha desconfianza a los productos del Microsoft esto es un avance muy importante par esta plataforma y por lo menos a mi me hace mirar a .Net con un poco mas de cariño (pero eso sera contado en otro post je je je).

Retomando el pobre Gilad es consciente del reto y de las dificultades, apunta a la posibilidad de que, al menos al principio, hacer que estas nuevas características no estén activadas por defecto, y que para su utilización fuese necesario utilizar una opción de comando que se podría llamar ¿-dynamic? o Dios sabe como.... De esa manera no impones a nadie nada y le darían la libertad para poder implementar la JSR 292.


A diferencia de muchos comentarios sobre esta JSR a mi entender que este proyecto vea la luz seria un aporte muy importante para Java, cambiando la filosofía de como muchas personas actualmente ven a java... como un lenguaje estático mas...

1 comentario:

Hugo dijo...

¿Cómo es eso de que le tienes cariño a .Net? :P



Buen tema, Saludos.