Cosas me gustan de Boo
Vamos por lo primero, Boo, es un lenguaje creado por el bueno de Rodrigo B. de Oliveira, y corre sobre .Net.
Macros: El compilador de Boo, tiene cosas muchas interesantes a notar, una de las que más me gustó es la capacidad de escribir macros. Vamos a un ejemplo:
Console.WriteLine(”Hola mundo”)
Podemos usar el macro print:
print “Hola mundo”
Todo lo que hay que hacer es heredar de la clase abstracta AbstractAstMacro y programar un poco. No hay magia aquÃ, el compilador está esperando una interfaz, y nosotros se la damos.
Para comenzar con el mundo de las macros, aconsejo que descarguen el código de Boo, o tomen a reflector de las orejas para mirar dentro de Boo.Lang.Compiller.dll y fÃjense como hace para implementar el macro print y debug, ambos se relacionan por que comparten la misma clase base (y abstracta por cierto): AbstractPrintMacro. Y luego cada uno implementa su macro: PrintMacro y DebugMacro. Por cierto, creo que es un ejemplo bastante sencillo para comenzar.
La idea base dentro de AbstractPrintMacro es: Si nos pasan 0 ó 1 argumento, devolvemos al compilador un ExpressionStatement, y sino ( > 1) devolvemos un Block, que vendria a hacer algo asà como un conjunto de ExpressionStatement, un composite. La expresión que nos pasen dependerá de las sub-clases: es decir, si queremos hacer un print o un debug, System.Console.WriteLine/Write ó System.Diagnostics.Debug.WriteLine/Write respectivamente.
Y como esto es .Net, podemos hacer las macros en cualquier lenguaje que tenga su compilador en .Net.
Un ejemplo de la flexibilidad de las macros es la librerÃa Rhino Mocks Boo Macros