Подтвердить что ты не робот

Существуют ли какие-либо книги/документы по дизайну DSL? (не DSL-реализация)

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

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

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

И это приводит меня к моим вопросам: Какие языковые конструкции интуитивно понятны, понятны и понятны?

В текущей экспериментальной версии 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 части инструкции, он не делает '- знать, принадлежит ли это утверждению или нет (кроме того, что синтаксический анализатор тоже не знал, и должно было быть какое-то закрытие).

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

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

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

4b9b3361

Ответ 1

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

Итак, по удобству использования языков:

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

Натуральное программирование содержит множество интересных публикаций, наиболее полезным для меня было Вопросы юзабилити при разработке новаторских систем программирования

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

Ответ 2

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

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

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

(Аранго был моим офицером в UCI Irvine еще в 1980-х годах, когда анализ домена и разработка были горячей темой).

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

Ответ 3

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

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