Методы реализации внутренних DSL - PullRequest
2 голосов
/ 03 января 2011

Я хочу спросить о предметно-ориентированных языках. Внутренний DSL на основе классификации Мартина Фаулера. (На мой взгляд, внутренний DSL похож на создание API !!)

каковы некоторые распространенные методы, используемые для реализации внутренних DSL.

Другой вопрос, внутренние DSL - это так называемые плавные интерфейсы, встроенные языки?

Спасибо, Джо

Ответы [ 3 ]

1 голос
/ 03 января 2011

На многие из этих вопросов есть хорошие ответы в DSL в действии, http://debasishg.blogspot.com/,, так что вы можете посмотреть книгу, написанную этим автором.

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

Хорошую дискуссию о том, что такое DSL, вы можете посмотреть на http://www.oreillynet.com/ruby/blog/2005/12/what_is_a_dsl.html.

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

0 голосов
/ 04 января 2011

В настоящее время я читаю новую книгу Фаулера Специфичные для домена языки , и она выложена как любая ссылка на шаблон, с различными общими шаблонами для реализации различных типов / частей DSL вместе с их бэкэндом " Семантическая модель "с. Его широта удивительна, с достаточной глубиной, чтобы показать несколько хороших примеров, то есть он обсуждает концепции / проблемы в различных ортогональных представлениях реализации / определения DSL.

Он очень усердно работал над ограничением глубины, иначе количество страниц было бы в квадрате, а не просто удвоилось. Настоятельно рекомендуется (пока - я в 10-й главе, где он обсуждает небольшой набор общеизвестных DSL, например, CSS, Make и т. Д., Просто чтобы помочь вам лучше понять терминологию и «шаблоны», приукрашенные по первым 9 главам - 57 глав, в большинстве из которых обсуждаются различные «шаблоны» DSL).

0 голосов
/ 03 января 2011

Я думаю, что статья Фаулера уже достаточно хорошо объясняет эту концепцию (и он определяет термин, поэтому его определение верно по определению: -)

Ключевое понятие здесь --программирование: вы используете средства метапрограммирования основного языка, чтобы выглядело так, как будто вы ввели новые ключевые слова.Там, где это возможно / целесообразно, вы используете оценку времени компиляции, в других случаях вы используете обход стека для внедрения кода в вызывающие области.

Строго говоря, это просто API.Однако, (по моему мнению), это внутренний DSL, если для этого в Pascal требовалось правильное расширение языка.

...