Реализация DSL в .NET - PullRequest
       28

Реализация DSL в .NET

3 голосов
/ 23 марта 2012

Я реализую небольшой DSL поверх .NET (4.0) и в настоящее время использую деревья выражений, чтобы превратить DSL в куски исполняемого кода.

DSL предопределен, так как мы реализуем поддержку устаревшего формата файлов.

Являются ли деревья выражений наиболее подходящим инструментом для этой работы?

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

Деревья выражений бесполезны, если вы хотите создавать новые типы.И для большинства типичных DSL вы должны создавать типы.Итак, старый добрый System.Reflection.Emit, вероятно, будет лучшим выбором.

1 голос
/ 14 октября 2012

Вы можете взглянуть на Boo и более конкретно на Rhino.DSL , который построен на нем.Чтобы получить представление о том, что Бу приносит на стол, сообщения Айенде - отличный стартер.

Бу описывается его инициаторами как:

новыйобъектно-ориентированный статически типизированный язык программирования для Common Language Infrastructure с синтаксисом, основанным на Python, с особым акцентом на расширяемость языка и компилятора.

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

Поместив Boo где-нибудь в свой конвейер, как это делает Rhino.DSL, вы реализуете много универсальности, которая даже не нужна раздутой, или снижение производительности (это все еще скомпилированный байт-кодкоторый запускается).

Если вы посмотрите на модульные тесты на Rhino.DSL , вы быстро получите представление о том, что возможно.

Хотя одна заметка: все упомянутые репозитории на данный момент довольно неактивны (в течение последнего года не работали), но ИМХО это не умаляет их практического использования.

Надеюсь, это поможет вам.

...