В настоящее время я участвую в некоторых интересных исследованиях в области программирования, которые до сих пор были сосредоточены вокруг расширения предстоящего компилятора Java 7.0 с помощью некоторых очень мощных функций, основанных на программировании. Работа должна быть в равной степени применима к соответствующим языкам программирования, таким как С#.
В настоящее время я просматриваю параметры прототипирования порта С# для функциональности. Я бы предпочел варианты с открытым исходным кодом, чтобы плоды этой работы можно было разделить с самой широкой аудиторией. Таким образом, компилятор Mono С# кажется наиболее очевидной отправной точкой. Я опытный разработчик С#, поэтому писать код не проблема. Я в основном обеспокоен расширением компилятора поддерживаемым и поддерживаемым образом. В разделе "Часто задаваемые вопросы по Mono" (ссылка) указано, что "Mono уже используется в качестве основы для тестирования новых идей для С# языка (есть три или четыре компилятора, полученные из компилятора Mono С#)". К сожалению, нет никаких дополнительных указателей, кроме этого, и до сих пор поисковые запросы Google ничего не изменили.
Мне интересно, есть ли у кого-нибудь информация об этом. У mcs
/gmcs
/dmcs
есть стандартная модель расширяемости? В частности, я буду выполнять некоторые интересные преобразования в абстрактном синтаксическом дереве программы. Существует ли стандартный механизм для вставки функциональности в цепочку компилятора между генерацией абстрактного синтаксического дерева и проверкой типа, а затем генерации кода?
До сих пор я писал некоторые специальные расширения для кода (прежде всего в генераторе кода), но это не похоже на поддерживаемое решение, особенно учитывая, что я намерен обновлять свои расширения с помощью Git ствол Mono как можно больше. Кроме того, было бы неплохо иметь возможность обновлять мои расширения без необходимости перекомпилировать весь компилятор каждый раз, когда я вношу изменения. Я хотел бы, чтобы все мои манипуляции с АСТ превращались в одну сборку .NET, которая могла бы динамически загружаться с помощью mcs
/gmcs
/dmcs
без необходимости напрямую обрабатывать основной код компилятора.
Любые мысли или указатели на расширение компилятора Mono С# будут с благодарностью получены!
ОБНОВЛЕНИЯ (23 октября 2010 г.)
В ответ на мои вопросы я решил, что начну работать над ветвью Mono, чтобы создать простую модель расширяемости для компилятора. Это на самом раннем этапе, но здесь он находится в GitHub:
http://github.com/rcook/mono-extensibility
И основная фиксация: http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
Если кто-нибудь заинтересован в сотрудничестве в этом проекте, сообщите мне об этом!