Возможно, вы можете взглянуть на Boo и более конкретно на Rhino.DSL, который построен на нем. Чтобы получить представление о том, что Boo приносит на стол, Ayende's posts - отличный стартер.
Boo описывается его inceptors как:
нового объектно-ориентированного статически типизированного языка программирования для Common Language Infrastructure с питона вдохновил синтаксис и особым акцентом на языке и расширяемости компилятора.
В принципе, это альтернатива C#: также скомпилирована, но гораздо более гибкая, чтобы вы могли динамически настраивать новые языковые конструкции. Деревья выражений являются лишь частью того, что задействовано.
Путем размещения Boo где-то в вашем конвейере, как это делает Rhino.DSL, вы развязываете много универсальности, которая даже не нужна раздутая или высокопроизводительная свинга (она по-прежнему компилируется байт-кодом, который запускается).
Если вы посмотрите на the unit tests on Rhino.DSL, вы получите быстрое представление о том, что возможно.
Одно замечание: все упомянутые хранилища в настоящий момент неактивны (в течение последнего года активности не было), но ИМХО, которые не девальвируют их практическое использование.
Надеюсь, это может вам помочь.
Спасибо за ваш ответ, @ SK-logic. Не могли бы вы немного расшириться, пожалуйста. Почему деревья выражений «бесполезны, если вы не хотите генерировать новые типы», и как «Reflection.Emit» будет мне лучше? –
@GregB, я имел в виду противоположное - деревья выражений не могут использоваться для генерации новых типов. Вы можете компилировать их только в делегаты. Представьте себе, скажем, DSL для какой-то ORM, которая будет сопоставлять базу данных с иерархией объектов. Он должен выделять типы для этих объектов, и вы можете делать это только с помощью Reflection.Emit. –