Что такое предметно-ориентированный язык? Кто-нибудь использует это? И каким образом?

Думаю, я ищу какое-то интро и посмотрю, использовал ли кто-нибудь его. Существуют ли какие-либо особые преимущества его использования?

Википедия:

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

Может ли кто-нибудь указать какие-либо конкретные примеры того, как вы его реализовали, или как это может быть полезно в данном сценарии?

Ответ 1

Язык, специфичный для домена, - это язык, написанный для работы с определенным доменом или набором проблем. Их много, например make, ant и грабли для описания программных сборок, или lexx и yacc для построения языка. В последние годы они стали популярными, поскольку некоторые вещи объединились, чтобы упростить их сборку. Большой среди этих вещей была растущая популярность Ruby, которая имеет несколько функций, которые упрощают создание новых DSL.

Мартин Фаулер - большой сторонник идеи, так как здесь.

Ответ 2

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

Примеры DSL включают в себя все языки запросов (SQL, XPath,...), все языки шаблонов (Django, Smarty,...), сценарии оболочки, особенно включая такие вещи, как twill, веб-браузер с управляемой командой (в основном используется для автоматического тестирования), языков хранения данных и обмена (XML, YAML,...) и языков документа, таких как LaTex, HTML или CSS.

Некоторые языки с очень гибким синтаксисом, такие как TCL и Lisp, строят свои DSL непосредственно на языке... когда это возможно. Большинство языков используют строки, обычно загружаемые из внешних файлов.

Существуют ли какие-либо особые преимущества их использования? Использование их в своих намеченных целях очень выгодно для того, чтобы вы обращались к ним, не зная, как вы использовали (я полагаю) SQL или HTML, не думая о них как о DSL.

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

Ответ 3

(обращаясь к сути вопроса)

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

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

Ответ 4

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

Противоположность языку, специфичному для домена (DSL), является языком общего назначения.

Ответ 5

Все это DSL...

Ассемблер: MOV R1 до R2
Составители: Заявления о назначении - A = A + 1, Условные - IF (TRUE)..., Ветвление - ВОЗВРАТ

HTML:... описать вложенную структуру
TCP/IP: описать/от адресов
PDF: описать размещение текста/изображения на бумаге
Шрифты: описание символов

Любой язык, который мы используем для описания конкретного процесса, - это DSL. К сожалению, существует нехватка доменных языков для описания даже наших самых основных процессов, поэтому мы используем несколько языков, на которых мы должны описывать все, что мы делаем. "Zip всех html файлов на моем веб-сайте" требует 300 строк из 3 или 4 разных языков.

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

Я бы держался подальше от использования других решений, которые могут быть удобными, но не подходят для такой проблемы, как HTML, который использовался для определения Data (XML). CSV очень полезен, он подходит для большинства проблем. JSON не подходит для легкости использования, это чрезмерное количество лишних осложнений, поскольку CSV работает для большинства проблем. Мы используем EXCEL для DSL, он отлично работает для описания небольших проблем, под 65K до 1M строк, таких как древовидные структуры или меню, столбец A - это уровень, другие столбцы - значки, цвета, метки и т.д. (EXCEL - это редактируемый CSV).

Я обнаружил, что HTML действительно не решает проблему макета страницы, поэтому я избавился от него и определил DSL, который подходит. Я определил 6 регионов на странице: HEADER, BODY, FOOTER, LEFT/RIGHT MARGINS и LEFT/RIGHT FULL MARGINS. Затем я мог бы сообщить генератору страниц добавить TITLE BAR, STATUS BAR, MENUS, TABLE, FORMS,... в конкретные ячейки. Затем каждую из этих ячеек можно разделить на строки и столбцы на любую глубину. Макет страницы занимает несколько секунд для любого стиля.

BODY содержит таблицу моих сотрудников
HEADER содержит заголовок заголовка "Hello World" с именем входа в Collins Software

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

Ресурс Мое главное меню
* Определить: меню, м, уровень, Этикетка, Icon, Action,
м, 0, файл;
m, 1, open, open.gif, Dialog Open File;

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

Ответ 6

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

Ответ 7

Я написал короткое сообщение в блоге, в котором обсуждают, почему мне нравится использовать DSL:

Я желаю, чтобы мы использовали специфичные для домена языки (DSL) Подробнее

В нем я определяю DSL как:

Небольшой язык программирования, специально предназначенный для передачи решений для определенного домена проблем.

С точки зрения использования, если вы когда-либо использовали Ant, Structured Query Language (SQL) или Cascading Style Sheets (CSS), вы использовали DSL.

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

Ответ 8

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

Поскольку языки общего назначения используются для обширных целей, DSL создается только для определенного домена. Как HTML или CSS.

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

I onces создал плату коммутатора для пользователя, которая может управляться через последовательный порт компьютера, а пользователю нужна программа для этой платы, которая может быть выполнена на этой плате, и реле реле будут соответственно включены и выключены. Поэтому я написал несколько инструкций и попросил пользователя запрограммировать эту плату в соответствии с этими инструкциями. Это пример DSL. Я не изобрел новый язык, а затем создал только группу строк, которые микроконтроллер мог читать из EEPROM, и мог анализировать соответственно и мог выполнять определенную задачу.

Ответ 9

Недавно я услышал DSL, но нашел действительно полезный пример: LUNA (бывший lunascript).

Это пользовательский язык программирования/фреймворк, созданный командой Asana для собственной платформы.

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

  • SAP с AbAp
  • PeopleSoft с PeopleCode
  • Apple с Objective-C
  • В Facebook есть такие вещи, как FBML и FQL

Это домен, потому что вы будете использовать их почти исключительно для работы на этих платформах.

Я надеюсь, что этот ответ поможет вам прояснить концепцию.

Ответ 10

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

Ответ 11

Примером DSL, используемым в машинном обучении, является patsy в python: https://patsy.readthedocs.io/en/latest/formulas.html#

которая основана на формуле DSL из R: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html

https://cran.r-project.org/web/packages/Formula/vignettes/Formula.pdf

и у Хэдли есть хороший раздел его продвинутой книги по R, который описывает, как построить DSL с R: http://adv-r.had.co.nz/dsl.html

Как только область глубокого обучения стабилизируется (или даже сейчас), я бы хотел, чтобы нечто подобное возникло в проекте Apache MXnet. Тем не менее, я еще не видел ни одного предложения по этому вопросу на странице предложений.

Ответ 12

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

Сообщество, безусловно, растет, но все еще не находится на уровне других "основных" технологий.

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

Вот конференция, на которой докладчик дает несколько примеров DSL, используя JetBrains MPS с технологией проекционного редактирования: https://vimeo.com/197381453

Ответ 14

DSL - DomainSpecificLanguage

DSL - это компьютерный язык, нацеленный на конкретную проблему, а не язык общего назначения, нацеленный на любую программную проблему.

Где: конфигурации (TravisCI.yaml), сценарии сборки (gradle), описание версии библиотеки Pod (Podspec), программирование пользовательского интерфейса (Anko) и т.д.

DSL - декларативное программирование - что делать вместо как делать

Внешние DSL имеют свой собственный синтаксис, и вы создаете полный анализатор для их обработки (например, XML, RegExp, SQL, HTML, CSS, UML).

Внутренние DSL - это особые способы использования языка хоста для придания языку хоста ощущения определенного языка (например, Lisp, Ruby, аннотации Java, макросы).

Подробнее здесь, здесь