Использование Mono Compiler / Создание нового при выводе Windows EXE? - PullRequest
4 голосов
/ 02 марта 2010

Пока это только мысль, но мне интересно, насколько сложно было бы использовать Mono Compiler или написать новый, все еще выводя Windows EXE?

Причина этой мысли в том, что я вижу, как люди творчески "злоупотребляют" языком C #, чтобы получить такие вещи, как контракты кода или аспектно-ориентированное программирование, и запускать их, и иногда кажется, что люди слишком сильно растягиваются.

Хорошая вещь в .net заключается в том, что в конце все, что нам нужно, это действительный IL для .net 2.0 CLR. Однако компилятор Microsoft C # закрыт и не может быть расширен. Смешивание разных языков возможно только в разных сборках.

Смысл (предупреждение: может показаться ужасным) состоит в том, чтобы использовать компилятор, который может быть расширен, и запускать его как своего рода препроцессор. Таким образом, было бы возможно добавить новые ключевые слова и языковые концепции, в то же время возвращая действительный IL.

Очевидным недостатком является, конечно, то, что а) это уже не C #, а C # -приятие, которое никто не понимает, б) писать компилятор сложно, поскольку нужно соблюдать бесчисленные правила для поддержания высокого качества и логического синтаксиса.

Но, как уже было сказано, это пока только мысль. Это немного то же направление, что и Mono.Cecil, но совершенно другой подход.

1 Ответ

2 голосов
/ 03 марта 2010

Я с нетерпением жду эволюции программирования от текста к чему-то более структурированному. Программы уже очень структурированы, но все еще редактируются в виде простого текста, что делает IDE основным упражнением в изобретательности. Добавьте к этому расширяемость компилятора и сделайте IDE настолько дружелюбной, насколько Visual Studio звучит еще более устрашающе.

Макросы на основе AST + C # позволили бы сделать еще больше «творческих злоупотреблений» языком, но я чувствую, что реальный путь вперед - это Языковое программирование . Этот подход защищался годами, но первой системой этой парадигмы, которую я лично нашел действительно привлекательной, является Система метапрограммирования JetBrains . Кажется, он еще не очень известен, и у меня, конечно, нет практического опыта его использования, но они выпустили отличный продукт, построенный с использованием этой системы, поэтому он должен быть достаточно практичным. Учебное пособие демонстрирует степень его расширяемости, что поистине удивительно, особенно если раньше вы не видели языковых систем.

Если идти по этому маршруту, то релевантными будут только части существующего моно-компилятора. Возможно, вы могли бы многократно использовать большие части кода gen, но, очевидно, синтаксический анализатор бесполезен.

Система, похожая на MPS, но компилирующаяся в .NET и прекрасно интегрирующаяся в Visual Studio, будет очень кстати.

(И чтобы ответить на вопрос, который вы задаете напрямую: я думаю, было бы очень трудно сделать это достаточно хорошо, чтобы увидеть широкое распространение, но, конечно, не невозможно для пары великих и целеустремленных разработчиков)

...