В настоящее время я участвую в некоторых интересных исследованиях языка программирования, которые до сих пор были сосредоточены на расширении грядущего компилятора Java 7.0 с помощью некоторых очень мощных функций, основанных на производительности программиста. Работа должна быть в равной степени применима к родственным языкам программирования, таким как C #.
В настоящее время я определяю параметры прототипирования порта C # функциональности. Я бы предпочел варианты с открытым исходным кодом, чтобы плоды этой работы можно было донести до максимально широкой аудитории. Таким образом, компилятор Mono C # кажется наиболее очевидной отправной точкой. Я опытный разработчик C #, поэтому написание кода не проблема. Я в основном обеспокоен расширением компилятора поддерживаемым и поддерживаемым способом. В Mono FAQ по этому вопросу ( ссылка ) говорится, что «Mono уже использовался в качестве основы для опробования новых идей для языка C # (есть три или четыре компилятора, полученных из компилятора Mono C #). )». К сожалению, нет никаких других указателей, кроме этого, и пока поиски в Google ничего не нашли.
Мне интересно, есть ли у кого-нибудь какая-либо информация по этому поводу. Есть ли у mcs
/ gmcs
/ dmcs
стандартная модель расширяемости? В частности, я буду выполнять некоторые интересные преобразования в абстрактном синтаксическом дереве программы. Существует ли стандартный механизм для вставки функциональности в цепочку компилятора между генерацией абстрактного синтаксического дерева и средством проверки типов, а затем генерацией кода?
До настоящего момента я написал несколько специальных расширений для кода (в основном в генераторе кода), но это не представляется приемлемым решением, особенно с учетом того, что я намерен поддерживать свои расширения в актуальном состоянии с помощью Дробить багажник от моно как можно больше. Кроме того, было бы неплохо иметь возможность обновлять мои расширения без необходимости перекомпиляции всего компилятора каждый раз, когда я вносил изменения. Я хотел бы иметь возможность обернуть все мои манипуляции с 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
Если кому-то будет интересно сотрудничать в этом проекте, пожалуйста, дайте мне знать!