четверг, 6 января 2011 г.

23/97: Языки предметной области

Это перевод Domain-Specific Languages. Автор: Michael Hunger.

Когда бы вы не вслушались в разговор экспертов в какой-либо предметной области, будь то шахматисты, работники детского сада или страховые агенты, вы всегда заметите, что они используют слова, отличающиеся от обычных, используемых повседневно. Это то, что называется "язык предметной области" (Domain-Specific Language, DSL) – набор слов и выражений, описывающий вещи, характерные для данной предметной области.

В мире программного обеспечения под DSL подразумевается набор исполняемых выражений на языке, специфичном для данной области, с ограниченным словарем и грамматикой, которые при этом читабельные, понятные и (хорошо если так) используемые экспертами предметной области. DSL предназначен для разработчиков или научных работников, находящихся в этой предметной области долгое время. Например, язык конфигурационных файлов Unix или языки, созданные при помощи LISP-макросов.

DSL принято разделять на внутренние и внешние.
  • Внутренние DSL создаются при помощи языков программирования, чей синтаксис близок к обычному языку людей. Сделать такое проще на языках, предлагающих больше «синтаксического сахара», как например Ruby или Scala, и сложнее на тех, которые такого не предоставляют (например, Java). Большинство внутренних DSL представляют собой обертки для существующих API, библиотек, предоставляя менее головоломный вариант использования существующей функциональности. Их можно исполнять напрямую. В зависимости от реализации и домена, DSL могут создавать структуры данных, определять зависимости, запускать процессы и задачи, связываться с другими системами или проверять пользовательский ввод. Синтаксис внутренних DSL ограничивается языком программирования, на котором они реализованы. Существует много шаблонов, например, построители выражений, цепочечные методы, аннотации, которые могут помочь вам "привести" ваш язык программирования к вашему DSL. Если используемый язык программирования не требует перекомпиляции, то внутренний DSL может быть весьма быстро разработан при непосредственном участии эксперта предметной области.
  • Внешние DSL – это текстовые или графические выражения языка, причем текстовые, как правило, используются чаще. Текстовые выражения могут обрабатываться инструментарием, включающим лексический анализатор, грамматический разбор, модификатор модели, генераторы и другие виды постобработки. Внешние DSL часто преобразуются во внутреннюю модель, представляющую базис для дальнейшей обработки. Хорошо помогает задать грамматику (например, расширенную форму Бэкуса-Наура). Грамматика предоставляет начальную точку для всего остального (редактор, визуализатор, грамматический разборщик). Для простых DSL ручной разборщик грамматики может быть достаточным (например, можно использовать регулярные выражения). В более сложных случаях лучше посмотреть в сторону специально разработанных для работы с грамматиками инструментов, таких как openArchitectureWare, ANTlr, SableCC, AndroMDA. Определение внешнего DSL как диалекта XML тоже часто встречается, хотя читабельность такого языка часто является проблемой, особенно для тех, кто не знаком с XML.
Вы всегда должны отслеживать, для кого предназначен ваш DSL. Для разработчиков, менеджеров, заказчиков или конечных пользователей. Вам нужно адаптировать технический уровень языка, доступные инструменты, помощь по синтаксису, раннюю проверку, визуализацию для уровня тех, кто будет этим пользоваться. Скрывая технические детали, DSL может помочь пользователям, давая им возможность настраивать систему под себя без помощи разработчиков. Это может также ускорить разработку путем распределения работы после того, как DSL займет свое место в системе. DSL может постепенно развиваться. Существуют различные способы миграции уже существующих выражений и грамматик.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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