Estendendo o compilador Mono C #: existe alguma documentação ou precedente?

Atualmente, estou envolvido em uma interessante pesquisa em linguagem de programação que, até agora, centrou-se em estender o próximo compilador Java 7.0 com alguns recursos muito poderosos baseados em produtividade de programadores. O trabalho deve ser igualmente aplicável a linguagens de programação relacionadas, como C #.

Atualmente, estou pesquisando as opções para criar uma porta C # da funcionalidade. Prefiro opções de código aberto para que os frutos deste trabalho possam ser compartilhados com o público mais amplo possível. Portanto, o compilador Mono C # parece ser o ponto de partida mais óbvio. Eu sou um desenvolvedor experiente em C #, portanto, escrever o código não é o problema. Estou preocupado principalmente em estender o compilador de uma maneira sustentável e suportada. No FAQ Mono sobre o assunto (ligação) afirma que "o Mono já foi usado como base para testar novas idéias para a linguagem C # (existem três ou quatro compiladores derivados do compilador C # do Mono)". Infelizmente, não existem outros indicadores além disso e, até agora, as pesquisas no Google não revelaram nada.

Eu estou querendo saber se alguém lá fora, tem alguma informação sobre isso. Fazmcs/gmcs/dmcs tem um modelo de extensibilidade padrão? Especificamente, executarei algumas transformações interessantes na árvore de sintaxe abstrata de um programa. Existe um mecanismo padrão para inserir funcionalidade na cadeia do compilador entre a geração abstrata da árvore de sintaxe e o verificador de tipos e depois a geração de código?

Até agora, escrevi algumas extensões ad-hoc no código (principalmente no gerador de código), mas isso não parece ser uma solução sustentável, especialmente porque pretendo manter minhas extensões atualizadas com o tronco Git de Mono, tanto quanto possível. Além disso, seria bom poder fazer atualizações nas minhas extensões sem precisar recompilar todo o compilador toda vez que eu fizer uma alteração. Gostaria de poder agrupar todas as minhas manipulações AST em um único assembly .NET que pudesse ser carregado dinamicamente pormcs/gmcs/dmcs sem ter que cortar diretamente o código do compilador principal.

Quaisquer pensamentos ou sugestões sobre a extensão do compilador Mono C # serão recebidos com gratidão!

ATUALIZAÇÕES (23 de outubro de 2010)

Em resposta às respostas à minha pergunta, decidi que começaria a trabalhar em uma ramificação do Mono para criar um modelo de extensibilidade simples para o compilador. Está nos estágios iniciais, mas aqui está no GitHub:

http://github.com/rcook/mono-extensibility

E o principal commit é:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01

Se alguém estiver interessado em colaborar neste projeto, entre em contato!

questionAnswers(2)

yourAnswerToTheQuestion