Babel de lenguajes en .NET

Published on Author lopezLeave a comment

El viernes pasado tuve el gran gusto de compartir un TechNight con los buenos de Martín Salías y Rodolfo Finocchieti, en temas que nos gustan a los tres: lenguajes de programación, en este caso, implementados sobre .NET. Ya habíamos preanunciado el evento en:

Technight en proceso
Papa fritas, cervezas y una babel de esos raros lenguajes nuevos

(bueno, me gustó la imagen que usé entonces para ilustrar mi post, así que la repito acá… ;-).

Desde que tengo memoria, ha habido lenguajes de programación y más lenguajes de programación. En mi tierna infancia ya había varios lenguajes (sí, algunos mal intencionados van divulgando por ahí que cuando yo era un infante, había una sola masa continental, pero son rumores infundados… ;-).

Recuerdo un artículo de los 60 del Scientific American, donde se mostraba un lenguaje propuesto, no totalmente desarrollado, el CPL (Combined Programming Language). Recordaba vagamente que era parte de un trabajo de Christopher Strachey, hoy lo pueden comprobar en el corto artículo de la Wikipedia sobre CPL. (Bien! la neurona todavía me trae recuerdos más o menos “accurate”…;-).

Se vió que era un lenguaje algo ambicioso. Yo llegué a programar con una versión simplificada, el BCPL, de Martin Richards que tenía algo que me sigue fascinando: su compilador estaba escrito en BCPL, así que bastaba usar una máquina que tuviera implementando BCPL para poder ir armando otros compiladores BCPL en otras máquinas. También se podía generar un O-Code para una máquina virtual, y reimplementar esa máquina virtual en otras computadoras. Desde ideas de BCPL partieron el B y nuestro conocido lenguaje C. Otros intentos de máquinas virtuales fueron el P-Code de Pascal BSD, creo recordar, y también las Smalltalk machine que siempre se pensaron armar sobre ideas de Smalltalk. Siempre es interesante encontrar la idea de un lenguaje que implementa su propio compilador o intérprete. Recuerdo el mítico Small C de Cain y luego Hendrix, que aparecía a principio de los ochenta en Dr. Dobb’s. Este año reencuentro esa idea de “lenguajes auto sustentables” en Self-sustaining Systems, Cola, Pepsi, Coke y Mate.

Hoy no podemos hablar, como antes (algunas décadas), de “yo programo en X (un solo lenguaje)”. Cada vez más, tenemos más opciones. Habrá que ver que no todas son potables para todos los trabajos. Pero pienso que debemos de vez en cuando, sumergirnos en el estudio de otros lenguajes, para tener una visión más amplia, ejercitar la neurona, y tener una nueva “tool” en nuestra caja de herramientas.

En los noventa, nos encontramos de nuevo con el auge de las máquinas virtuales, con la aparición de Java. Con el nacimiento de .NET, tenemos una máquina virtual (aunque alguien de Microsoft se atragantaría con su lengua antes de denominar al CLR, Common Language Runtime, como máquina virtual).

Es sobre .NET y su máquina virtual, donde aparecieron múltiples implementaciones de lenguajes. Pero basta de historia, y pasemos a la charla en sí.

La charla

Excelente lo que mostraron Martín y Rodolfo. Yo comenté algunos temas de programación funcional, orientados a F#, basado en ejemplos que vienen con el lenguaje, y de libros. Los recursos que utilicé y nombré estan en mi anterior post:

Recursos de F# y Programación Funcional

Quisiera poner acá un resumen de lo que mostraron Martín y Rodolfo.

Rodo se dedicó a comentar en particular dos lenguajes, Boo y Cat, además de seguir comentando sobre las ideas de funcional. También mostró un Toy language, implementado usando las capacidades de Dynamic Language Runtime (Rodolfo, no encontré si está disponible ese ejemplo). Pueden bajarse su presentación desde

TechNight: programming in Babel

 Boo lenguaje de programación creado por Rodrigo Barreto de Oliveira. Pueden leer el Boo Manifesto para conocer más sobre la historia del lenguaje. Rodrigo necesitaba un lenguaje que se adaptara a lo que necesitaba programar, y como no encontraba ninguno que diera la talla, se lanzó a crear su propio lenguaje. El estaba entusiasmado con Python, pero en esos momentos no lo podía usar en el proyecto que tenía que desarrollar. Boo tiene una sintaxis inspirada en Python, declaración automática de variables, inferencia automática de tipos, casteo de tipos automático, funciones como objetos y ciudadanos de primera clase en el lenguaje, duck typing (la gente de Smalltalk reconocerá el concepto, y se asombrará de que exista como tal, para ellos es parte de la naturaleza misma). Rodolfo nos fue mostrando todos estos conceptos, pueden ver más detalles en la presentación que dejó disponible.

Otro lenguaje que mostró fue  Cat Programming Language. Conocí este lenguaje gracias al bueno de Rodolfo, que me dejó un comentario en este blog (eso es cumplir con Don’t be a Canuto, bravo!). Es un lenguaje funcional, orientado a pila, que nació de otro trabajo en Java, el Joy Programming Language. La primera vez que lo ví, me recordó a mi querido Forth (aún debo tener en algún cubil mío, la Dr. Dobb’s dedicada a ese lenguaje). Lo que me comentó Rodolfo el viernes, es lo simple que es la solución de código: podemos recorrerla y entenderla. Es un caso de estudio abordable de generación de código compilado en .NET, con instrucciones de Intermediate Language. Vean también cómo un lenguaje definido se puede reimplementar en otros. Lo tienen en JavaScript Online Cat interpreter , en Cat in Scheme, Cat in Python, Cat in Haskell, Cat in Haskell using monads, y en Cat in Omega. ¿Tendré que pasarlo a ajlisp o ajbasic? 😉

En su turno, Martín Salías siguió comentando sobre implementaciones de lenguajes en Dynamic Language Runtime, en especial la historia de IronPython, creado por Jim Hugunin. Jim es el creador de Jython, la implementación de Python sobre Java, y quería demostrar que la máquina virtual de .NET no era adecuada para implementar un lenguaje dinámico como Python. Y se lleva la sorpresa de poder hacerlo mejor que en Java. Así va naciendo lo que ahora conocemos como Dynamic Language Runtime, un nuevo namespace de código abierto, que crea Jim dentro de la implementación de IronPython, y que podemos usar para implementar otros lenguajes. Nos da clases de soporte para armar un árbol de expresiones en memoria, y luego generar código para .NET. No hay un lugar separado para bajarse esas clases, pero pueden obtenerlas desde:

http://www.codeplex.com/IronPython

Es interesantísimo ver la implementación en detalle, en especial los conceptos aplicados sobre DynamicSite, basta como botón de muestra

Martin Maly – Building a DLR Language – Dynamic Behaviors 2

y visitar el blog de Hugunin en MSDN.

Puede ver lo que se está gestando para IronRuby también.

Y comentó sobre todo lo que se está haciendo en JavaScript. Lean su post:

Javascript – La programación del futuro

Mencionó el trabajo del “monstro” de JavaScript, John Ressig:

 http://ejohn.org/ en Twitter @jeresig

sobre JavaScript, principal creador del JQuery (agregaría que en estos días, Microsoft ha decidido agregar JQuery a su implementación de ASP.NET Ajax). Martín dejó encantada a la audiencia, mostrando lo que hizo Resig: implementar en JavaScript un lenguaje gráfico Processing pasen, lean y vean:

Processing.js

(imagen tomada de ese post) 

Martín comentó que JavaScript corre en el cliente, con lo que se puede poner trabajo no trivial en esa máquina, haciendo más liviano el trabajo del servidor, que tal vez se encargue de darnos datos sin embellecer, el proceso de agrupación, mostrado, gráfico, puede ser derivado al cliente. Igualmente, hay JavaScript en el servidor, leer:

Permanent link to Bringing the Browser to the Server

Ahora que en los browsers está el elemento Canvas, podemos usarlo desde JavaScript, leer

Permanent link to Javascript Sparklines Library

Pero vean hasta donde puede llegar JavaScript, viendo el proyecto del bueno de Dan Ingalls:

Sun Labs Lively Kernel

Más enlaces

Para todos los que les gusta explorar los lenguajes de programación, sus paradigmas, ideas y futuro, algunos enalces recolectados en estos días:

JAOO 2007- Gilad Bracha – Computational Theology, Functional versus Imperative, Language History

Ted Neward- On Java and .NET, Software Academics versus Practioners, General Purpose Programming

Prolog just blew my mind!

Dynamic programming futures InfoWorld Analysis 2008-10-13 By Peter Wayner

Erik Meijer, Gilad Bracha, Mads Torgersen- Perspectives on Programming Language Design and Evolu

Dynamic Languages vs Static Verification – Greg Young [MVP]

Joe Gregorio BitWorking JavaScript is the new Smalltalk

ST2JS – Smalltalk to Javascript translator (el trabajo de nuestro argentino Diego Gomez Deck)

Google Chrome, JavaScript and Smalltalk

La preparación de esta charla, me movió a escribir y actualizar algo de código de mini intérpretes que estoy armando. Pueden ver el estado actual en:

http://code.google.com/p/ajbasic Intérprete, con sintaxis AjBasic y ahora también AjSharp
http://code.google.com/p/ajlisp Intérprete Lisp, bastante terminado
http://code.google.com/p/ajtalk Intérprete bytecodes a la Smalltalk, más adelante podría compilarse
http://code.google.com/p/ajfunc Idem, pero orientado a la F#
http://code.googe.com/p/ajlogo  El lenguaje Logo siempre es interesante de investigar

Bueno, como siempre, los enlaces de estos temas, que colecciono, desde:

http://delicious.com/ajlopez/dlr
http://delicious.com/ajlopez/javascript
http://delicious.com/ajlopez/programminglanguages
http://delicious.com/ajlopez/functionalprogramming
http://delicious.com/ajlopez/ruby
http://delicious.com/ajlopez/prolog
http://delicious.com/ajlopez/lisp
http://delicious.com/ajlopez/smalltalk
http://delicious.com/ajlopez/logo

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *