Extendiendo el compilador Mono C #: ¿hay alguna documentación o precedente?

Actualmente estoy involucrado en una interesante investigación de lenguaje de programación que, hasta ahora, se ha centrado en extender el 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 #.

Actualmente estoy explorando las opciones para crear prototipos 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. Me preocupa principalmente extender el compilador de una manera mantenible y compatible. En las preguntas frecuentes de Mono sobre el tema (enlazar) 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)". Desafortunadamente, no hay más indicadores que este y, hasta ahora, las búsquedas en Google no han dado resultados.

Me pregunto si alguien tiene información sobre esto. Hacermcs/gmcs/dmcs tiene un modelo de extensibilidad estándar? 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 tipo 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 esto no parece ser una solución fácil de mantener, 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 envolver todas mis manipulaciones AST en un único ensamblado .NET que pueda ser cargado dinámicamente pormcs/gmcs/dmcs sin tener que hackear el código del compilador central directamente.

¡Cualquier sugerencia o sugerencia sobre la extensión del compilador Mono C # sería gratamente recibida!

ACTUALIZACIONES (23 de octubre de 2010)

En respuesta a las respuestas a mi pregunta, decidí que comenzaría a trabajar en una rama de Mono para 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 compromiso principal es:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01

Si alguien estaría interesado en colaborar en este proyecto, ¡hágamelo saber!

Respuestas a la pregunta(2)

Su respuesta a la pregunta