Actualmente estoy involucrado en una interesante investigación de lenguaje de programación que, hasta ahora, se ha centrado en la ampliación del próximo compilador Java 7.0 con algunas características muy potentes basadas en la productividad del programador. El trabajo debería ser igualmente aplicable a lenguajes de programación relacionados como C#.Extender el compilador de Mono C#: ¿hay alguna documentación o precedente?
Actualmente estoy explorando las opciones para el prototipado de un puerto C# de la funcionalidad. Preferiría opciones de código abierto para que los frutos de este trabajo puedan compartirse con la audiencia más amplia posible. Por lo tanto, el compilador Mono C# parece ser el punto de partida más obvio. Soy un desarrollador experimentado de C# por lo que escribir el código no es el problema. Estoy principalmente preocupado por extender el compilador de una manera sostenible y compatible. En Mono FAQ sobre el tema (link) se afirma que "Mono ya se ha utilizado como base para probar nuevas ideas para el lenguaje C# (hay tres o cuatro compiladores derivados del compilador C# de Mono)". Lamentablemente, no hay más indicadores que este y, hasta el momento, las búsquedas de Google no han cambiado nada.
Me pregunto si alguien tiene alguna información sobre esto. ¿Tiene mcs
/gmcs
/dmcs
tiene un modelo estándar de extensibilidad? Específicamente, realizaré algunas transformaciones interesantes en el árbol de sintaxis abstracta de un programa. ¿Existe un mecanismo estándar para insertar funcionalidad en la cadena del compilador entre la generación del árbol de sintaxis abstracta y el verificador de tipos y luego la generación de código?
Hasta ahora he escrito algunas extensiones ad-hoc para el código (principalmente en el generador de código) pero esta no parece ser una solución mantenible especialmente dado que tengo la intención de mantener mis extensiones actualizadas con el tronco Git de Mono tanto como sea posible. Además, sería bueno poder actualizar mis extensiones sin tener que volver a compilar todo el compilador cada vez que realice un cambio. Me gustaría poder ajustar todas mis manipulaciones AST en un único ensamblado .NET que podría cargarse dinámicamente por mcs
/gmcs
/dmcs
sin tener que hackear el código del compilador central directamente.
Cualquier idea o sugerencia sobre la ampliación del compilador de Mono C# sería gratamente recibida.
Actualizaciones (23 Octubre 2010)
En respuesta a las respuestas a mi pregunta, decidí que iba a empezar a trabajar en una rama de Mono con el fin de crear un modelo de extensibilidad simple para el compilador. Está en sus primeras etapas, pero aquí está en GitHub:
http://github.com/rcook/mono-extensibility
Y el principal compromiso es: http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
Si alguien estaría interesado en colaborar en este proyecto, por favor hágamelo saber!
Como alternativa, eche un vistazo a [Boo] (http://boo.codehaus.org/). La extensibilidad del compilador es parte del "paquete". –