Primer vistazo a IronRuby

En los últimos años hemos estado trabajando para ahcer que .NET y el CLR sea un buen entorno para los lenguajes dinámicos. Hace unos 14 meses formamos un grupo dedicado que se ha centrado en añadir soporte para estos lenguajes al CLR, y entregar una primera implementación para .NET de estos lenguajes.

DLR entre bastidores

Esta primavera entregamos la primera release de la librería de .NET que llamamos "Dynamic Language Runtime" (DLR). Nos daba un conjunto de características encima del CLR diseñado para escenarios con estos lenguajes. Entre otras, tenemos un sistema de tipos compartidos, modelo de hosting de lenguajes, y soporte para hacer posible la generación de código dinámico rápido. Con esto conseguimos hacer muy fácil el crear implementaciones de lenguajes dinámicos para .NET. Estas implementaciones pueden acceder y usar cualquier API del Framework, interoperar con código en cualquier otro lenguaje (por ejemplo: podemos escribir una clase en Ruby que invoque y use una clase en C#, y que ésta última use una clase en Python).

ESta primavera en el MIX 07 anunciamos que Microsoft publicaría cuatro implementaciones de lenguajes dinámicos para .NET.

  • IronPython
  • IronRuby (nuevo)
  • Javascript
  • VB Dinámico (nuevo)

El código fuente de la implementación de IronPython, y la librería DLR, se publicó en CodePlex en Abril. Podéis descargarla del sitio de codeplex de IronPython. Todo el código está bajo la licencia MSPL - que permite modificaciones tanto comerciales como no comerciales.

IronRuby Pre-Alpha Release

Hoy estamos publicando la primera parte de la implementación de IronRuby. Para descargar el código, compilarlo y probarlo ved el post de John Lam aquí.

Todavía es una versión muy reciente, y muchas características del lenguaje y la mayoría de las librerías no están implementadas aún. (por eso la llamamos Pre-Alpha). Sin embargo tiene gran parte del soporte del lenguaje y puede usar tipos y APIs estándar de .NET.

La arquitectura de IronRuby ha sido pensaba para aprovechar una nueva característica del DLR que llamamos "Dynamic Sites" - que permite un método rápido de  adaptación a llamadas de sitio cacheadas. También usa las características de generación de código ligero del CLR. Con esto permitimos a las implementaciones de lenguajes dinámicos que creen IL en memoria que es compilado (JIT) a código nativo en tiempo de ejecución (sin tener que guardar nada en disco). Con esto conseguimos un mejor rendimiento en la ejecución que con el código interpretado, y la ligereza del código generado asegura que una vez que hayamos finalizado la compilación JIT podemos pasar el recolector de basura para eliminar los leaks de memoria.

Lo hemos publicado principalmente para aquellos desarrolladores que están interesados en la implementación de lenguajes para que empiezen a ver el código de IronRuby, y vean cómo lo hemos implementado. Los que quieran empezar a jugar con esta versión tan temprana de Ruby para .NET pueden descargarlo y echarle un vistazo.

Planes de proyecto de IronRuby

El próximo mes cambiaremos el repositorio de IronRuby y lo pondremos en RubyForge. Como parte de este cambio, también estamos abriendo el proyecto para que desarrolladores que no sean de Microsoft puedan contribuir. Entonces trabajaremos en la implementación de las características que faltan y solucionaremos algunos problemas de compatibilidad que hemos encontrado, haremos más librerías para portarlas encima.

El resultado final será una implementación de Ruby compatible, rápida y flexible encima de .NET que cualquiera podrá utilizar.

Ejemplo de consola "Hola Mundo" de IronRuby

Si os descargais y compilais el código de IronRuby, os preguntaréis "¿cómo empiezo a usarlo?"

La forma más sencilla de empezar es ejecutar la consola interactiva "rbx.exe" que se genera por defecto en el direcotio "binrelease":

En esta consola podemos escribir código Ruby de manera interactiva. Después de cada línea, la shell la ejecutará

Por ejemplo, podemos escribir "hello world" escribiendo puts "Hello World":

Para escribir esto diez veces, podemos escribir lo siguiente:

Para usar la funcionalidad de Windows Forms en IronRuby, podemos escribir una linea que añada una "referencia" al assembly de System.Windows.Forms, y usar el método MessageBox.Show para mostrar un mensaje en un cuadro de diálogo:

Ejemplo WPF e IronRuby de "Hola Mundo"

Uno de los beneficios de implementar un lenguaje encima de .NET es que permite a los desarrolladores usar ese lenguaje para acceder a todas las librerías del framework.

Como pequeño ejemplo, podemos crear un archivo de texto "HelloWPF.rb" y escribir el siguiente código Ruby:

Este código usa el framework de WPF para crear una ventana con un StackPanel que inicialmente tiene un boton. Cuando se pulse el botón, se crea un control label y se añade al StackPanel (haciendo que aparezca automáticamente en la ventana).

Ejecutamos la aplicación anterior con IronRuby pasando el archivo "HelloWPF.rb" como argumento a rbx.exe:

Cuando lo ejecutemos tendremos una ventana con un botón WPF ( nota: ántes añadí un DropShadowBitmapEfect en el código anterior):

Y cada vez que pulsemos el bóton, se añadirá una nueva Label a la ventana:

No sólo podemos usar todas las APIs de .NET , sino que también es posible integrar esas APIs en otras sintaxis de lenguajes:

En el codigo de arriba estamos usando un bloque de lenguaje Ruby (igual que las expresiones lambda en C#3.0 y VB9) para implementar un manejador del evento "Click" del botón WPF. Fijaos cómo podemos usar los patrones de nombres de Ruby en el código cuando accedemos a cualquier API de .NET. Por ejemplo, en lugar de usar la propiedad "FontSize" en la etiqueta WPF estamos accediendo a la propiedad "font_size". IronRuby administra automáticamente la conversión de nombres - permitiendo que los desarrolladores programen con un patrón consistente de nombrado que se ajuste a su lenguaje.

Resumen

Si estáis interesados en provar esta primerisima versión de IronRuby, podéis descargar el código de aquí.

Podéis descargar el ejemplo de WPF anterior y ejectuarlo por vosotros mismos aquí (nota: necesitáis la versión 3.0 o 3.5 de .NET instalada). Para aprender más sobre WPF, os recomiendo el libro de Adam Nathan WPF Unleashed (mirad los comentarios del libro en Amazon)

Espero que sirva.

Scott

Traducido por: Juan María Laó Ramos. Microsoft Student Partner.

toH tlhIngan Hol DajatlhlaH ‘e’ DaneH’a’?

Deja un comentario