Статьи

DSL в действии отсутствует

Все началось с письма от Кристины Мэннинг, выражающего их интерес к публикации книги по созданию синтаксических анализаторов в Scala. Она упомянула, что они натолкнулись на мою запись в блоге под названием « Внешние DSL», которую легко сделать с помощью Scala Parser Combinators, и Марьян Бейс (издатель) хотел бы поговорить со мной об этом возможном предприятии. Я до сих пор помню эту часовую дискуссию с Марджаном, которая в конечном итоге привела к мысли о выпуске книги по дизайну DSL.

Электронная книга DSL в действии (купить здесь ) * была опубликована, версия для печати должна быть 24 декабря, как раз к Рождеству. Последняя книга имеет размер 377 страниц с 9 главами и 7 приложениями. Перед публикацией книга была рецензирована на разных уровнях знаменитой группой рецензентов. Я получил много отзывов и предложений на онлайн -форуме Мэннинга . Нынешнее воплощение книги является результатом усвоения всех предложений, отзывов и критических замечаний, которым помогает конструктивный процесс редактирования команды Мэннинга. Джонас Бонер был достаточно любезен, чтобы написать предисловие к книге. Результат стал реальностью для всех вас, чтобы читать, наслаждаться и просматривать.

Кто-то попросил меня записать мои мысли о DSL в действии на одной странице. Не буквальное изложение того, что оно содержит, но впечатления от некоторых фрагментов мысли, которые она потенциально может вызвать в умах своих читателей. Этот пост является попыткой к этому.

DSL и полиглотизм

DSL предназначен для определенного домена. Ваша реализация должна быть достаточно выразительной, чтобы моделировать вездесущий язык, который пользователи вашего домена используют каждый день. Следовательно, практика развития, основанного на DSL, содержит в себе ауру полиглотизма. Если у вас есть соответствующий опыт в вашей команде, выберите язык реализации, который лучше всего подходит для разработки синтаксиса домена. DSLs In Action рассматривает тематические исследования в Ruby, Groovy, Clojure и Scala и фокусирует своих читателей на шаблонах реализации DSL в каждом из них.

DSL как среда сотрудничества

Одним из наиболее выдающихся аспектов, которые разработка, основанная на DSL, добавляет в команду, является повышенное внимание к совместной работе. Основным ценным предложением, которое DSL привносит в таблицу, является лучшая модель сотрудничества между разработчиками и пользователями домена. Ни для кого не секрет, что большинство сегодняшних провальных проектов связывают свое поражение с огромным разрывом в понимании разработчиками предметной области. Это в основном связано с отсутствием связи между разработчиками и пользователями домена, а также между различными группами разработчиков. Если у вас есть фрагменты кода, как показано ниже, как часть модели вашего домена.

import TaxFeeImplicits._
override def calculatedAs(trade: Trade): PartialFunction[TaxFee, BigDecimal] = {
case TradeTax => 5. percent_of trade.principal
case Commission => 20. percent_of trade.principal
case Surcharge => 7. percent_of trade.principal
case VAT => 7. percent_of trade.principal
}


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

Важность семантической модели

DSL — это тонкий слой лингвистической абстракции на вершине семантической модели. Я написал в блоге на эту темунекоторое время назад. Семантическая модель — это набор абстракций, на которых вы расширяете синтаксис DSL. Семантическая модель потенциально может быть повторно использована для целей, отличных от разработки уровня DSL — следовательно, она должна быть как можно более слабо связана с синтаксисом, который публикует ваш DSL. В DSL в действии я обсуждаю концепцию DSL Facade, которая помогает вам отделить основные абстракции модели предметной области от самого языка.

DSL дизайн также абстракция дизайн

В DSL в действии я выделил много хороших качеств, которыми должна обладать хорошо продуманная абстракция. Фактически Приложение А полностью посвящено обсуждению качеств хороших абстракций. Почти в каждой главе я рассказываю о том, как эти качества (минимализм, дистилляция, сочетаемость и расширяемость) применяются на каждом этапе проектирования DSL. В реальности, когда вы реализуете DSL, вы увидите, что целые DSL также должны быть составлены как абстракции. Используйте правильный язык, который поддерживает хорошие модели композиции абстракции.

Внешнее и внутреннее — это только одно измерение классификации DSL.

Хотя в целом я говорю о внешних и внутренних DSL, на самом деле существует множество различных шаблонов реализации даже внутри них. Внутренние DSL могут быть встроены там, где вы добавили язык домена в систему типов языка хоста. Или они могут быть генеративными, когда вы позволяете языковой среде генерировать для вас код, как вы делаете это в Ruby или Groovy, используя динамическое метапрограммирование. С семейством Lisp вы можете создавать свой собственный язык, используя макросы. Некоторое время назад я писал о всех этих различных шаблонах реализации с внутренними и внешними DSL.

Надеюсь, вам всем нравятся DSL в действии. Если вы зашли так далеко в этом посте, на сайте Мэннинга есть бесплатные главы 1 и 4, которые помогут вам получить краткую информацию о некоторых вещах, о которых я говорил … Счастливых праздников!

От http://debasishg.blogspot.com/2010/12/dsls-in-action-is-out.html