Расширение компилятора Mono C #: есть ли документация или прецедент?

В настоящее время я участвую в некоторых интересных исследованиях языка программирования, которые до сих пор были сосредоточены вокруг расширения грядущего компилятора Java 7.0 некоторыми очень мощными функциями, основанными на производительности программиста. Работа должна быть в равной степени применима к родственным языкам программирования, таким как C #.

В настоящее время я определяю параметры прототипирования порта C # функциональности. Я бы предпочел варианты с открытым исходным кодом, чтобы плоды этой работы можно было донести до максимально широкой аудитории. Таким образом, компилятор Mono C # кажется наиболее очевидной отправной точкой. Я опытный разработчик C #, поэтому написание кода не проблема. Я в основном обеспокоен расширением компилятора поддерживаемым и поддерживаемым способом. В моно FAQ по теме (ссылка на сайт) утверждается, что «Mono уже использовался в качестве основы для опробования новых идей для языка C # (есть три или четыре компилятора, полученных из компилятора Mono C #)». К сожалению, нет никаких других указателей, кроме этого, и пока поиски в Google ничего не нашли.

Мне интересно, есть ли у кого-нибудь какая-либо информация по этому поводу. Делатьmcs/gmcs/dmcs есть стандартная модель расширяемости? В частности, я буду выполнять некоторые интересные преобразования в абстрактном синтаксическом дереве программы. Существует ли стандартный механизм для вставки функциональности в цепочку компилятора между генерацией абстрактного синтаксического дерева и средством проверки типов, а затем генерацией кода?

До сих пор я написал несколько специальных расширений для кода (в основном в генераторе кода), но это не представляется приемлемым решением, особенно с учетом того, что я намерен поддерживать свои расширения в актуальном состоянии с помощью магистрали Git Моно как можно больше. Кроме того, было бы неплохо иметь возможность обновлять мои расширения без необходимости перекомпиляции всего компилятора каждый раз, когда я вносил изменения. Я хотел бы иметь возможность обернуть все мои манипуляции AST в одну сборку .NET, которая может быть динамически загруженаmcs/gmcs/dmcs без необходимости взломать основной код компилятора напрямую.

Мы будем благодарны за любые мысли или советы по расширению компилятора Mono C #!

ОБНОВЛЕНИЯ (23 октября 2010 г.)

Отвечая на ответы на мой вопрос, я решил, что начну работать над веткой Mono, чтобы создать простую модель расширяемости для компилятора. Это на ранних стадиях, но здесь, на GitHub:

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

И основной коммит это:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01

Если кому-то будет интересно сотрудничать в этом проекте, пожалуйста, дайте мне знать!

Ответы на вопрос(2)

Ваш ответ на вопрос