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

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

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

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

До сих пор я писал несколько специальных расширений для кода (в основном в генераторе кода) ), но это не кажется поддерживаемым решением, особенно с учетом того, что я намерен как можно больше поддерживать свои расширения в актуальном состоянии с помощью магистрали Git Mono. Кроме того, было бы неплохо иметь возможность обновлять свои расширения без необходимости перекомпилировать весь компилятор каждый раз, когда я вношу изменения. Я хотел бы иметь возможность объединить все свои манипуляции с 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

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

15
задан Richard Cook 23 October 2010 в 23:45
поделиться