Есть ли книги / статьи по DSL Design?(не реализация DSL) - PullRequest
13 голосов
/ 11 ноября 2011

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

Работать с DSL должно быть легко;люди должны быть в состоянии экспериментировать с этим и учиться этому, играя вокруг.Мы хотим добиться чего-то похожего на макросы в Microsoft Excel - многие пользователи Excel могут создавать простые формулы, суммы или вычисления и никогда не работали с «настоящим» (универсальным) языком программирования.

Очевидно, что не каждый Excel-Пользователь понимает более сложные встроенные методы (например, When ()), но они могут использовать простые методы, такие как SUM () или AVG ().Я хочу добиться аналогичного эффекта с DSL - пользователи должны иметь возможность интуитивно работать с ним и определять простые правила или выполнять простые вычисления.В то же время DSL должен предлагать высокоуровневые функции для более технически склонных - таких как циклы, операторы if, возможно методы или лямбда-выражения.

И это подводит меня к моему вопросу (ам): Какие языковые конструкции интуитивно понятны, их легко выучить и понять?

В текущей экспериментальной версии DSLмы попробовали метод цепочки методов, пример: list.where(item -> item.value > 5).select(item -> item.name + " " + item.value)).Думайте о where и select как о конструкциях foreach, где item - это переменная, представляющая текущий элемент в цикле.

Причина, по которой мы сначала попробовали этот подход, состоит в том, что было бы легкоподдержка завершения кода - всякий раз, когда пользователь вводит точку (.), показывается список возможных методов.Однако я не уверен, что эта концепция соответствует моим критериям интуитивности, простоты понимания и чтения.

Легче / удобочитаемее для пользователей, если нет фигурных скобок?(как в LINQ: from item in list where item.value > 5 select item.name + " " + item.value).Однако в этом случае нет никаких «границ» - в предыдущем примере пользователь знает, что оператор заканчивается последней закрывающей скобкой - в этом случае, если он набирает больше кода после части select оператора, он не'- знать, относится ли оно к утверждению или нет (кроме того факта, что синтаксический анализатор не будет знать об этом и должно быть какое-то закрытие).

Надеюсь, мой вопрос немного яснее сэти 2 примера - я ищу рекомендации по проектированию, лучшие практики, реальный опыт , вероятно исследовательский материал из которых языковые конструкции благоприятны для других - или некоторую оценку плюсов иминусы некоторых языковых конструкций.

Я не ищу информации о том, как создать DSL, какие генераторы синтаксического анализатора я мог бы использовать и т. д., а также я не могу использовать существующий общий-целевой язык (Ruby, Python, ...) вместо того, чтобы использовать DSL.(DSL, когда разбирается, работает напрямую с нашей объектной моделью - я не буду вдаваться в детали, поскольку этот вопрос уже достаточно длинный).

Редактировать: Возможно, я должен отметить, что под "языковыми конструкциями" я подразумеваю синтаксис, способ написания чего-либо, а не то, какую функциональность должен предлагать язык - у нас уже естьсписок талантов, которые DSL должен предоставить.Вопрос в том, как лучше всего выразить эти особенности, чтобы можно было создавать (и поддерживать) простые и сложные формулы.

Ответы [ 3 ]

8 голосов
/ 24 октября 2012

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

Итак, о юзабилити языков:

Когнитивные измерения нотаций являются отличной основой для оценки удобства использования нотации или любого когнитивного артефакта в этом отношении.

Естественное программирование Сайт содержит много интересных публикаций, наиболее полезными для меня были Проблемы с юзабилити при проектировании систем программирования для начинающих

Наконец, наиболее недавней активной областью исследований, связанной с моим вопросом, является Разработка для конечного пользователя .Поиск публикаций в этой области должен привести к большому количеству полезной информации.

7 голосов
/ 11 ноября 2011

Мне кажется, что важнейшими вопросами при разработке домена являются его концепции и отношения между ними.Это покрыто анализом домена, который, как кажется, вы уже сделали, но ключевая ссылка в любом случае:

Гильермо Аранго по анализу домена

При таком анализе выхочу, чтобы инженер в области, в том числе средства выражения проблем и решений.Википедия по Domain Engineering была очевидным первым местом для этого, но я нашел ее очень неудовлетворительной в том, что в ней не было ссылки на работу Аранго.

(Аранго был моим партнером в UCI Ирвином в1980-е годы, когда анализ предметной области и инженерия были горячей темой).

То, что вы, похоже, хотите, это человеческий фактор в языковом дизайне. Билл Кертис подготовил отчет , хотя он немного староват, но может оказаться полезным.Он был (до сих пор) психологом.Я бы искал исследовательские работы, которые ссылались на его (см. Цитаты в Google Golopar).

1 голос
/ 11 ноября 2011

Я прочитал DSL в действии (http://www.manning.com/ghosh/)), и он проделал фантастическую работу по объяснению различных проблем, связанных с написанием DSL, и использовал несколько языков, которые работают на JVM в его примерах.

Итак, вы можете проверить это, а затем посмотреть на его ссылки, чтобы получить больше информации там, где вам это нужно.

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