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



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



Википедия:




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




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

378   11  
dsl

11 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

все это DSL...

ассемблер: MOV R1 to R2
Компиляторы: операторы присваивания -- A = A + 1, условные выражения -- IF (TRUE) ... Филиал-возвращение
формат HTML. :.. описать вложенную структуру
TCP / IP: опишите в / из адреса
PDF: опишите размещение текста/изображения на бумаге
Шрифты: описание символов

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

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

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

Я обнаружил, что HTML на самом деле не решает проблему макета страницы, поэтому я избавился от нее и определил DSL, который подходит. Я определил 6 областей на странице, заголовке, теле, нижнем колонтитуле, левом / правом полях и СЛЕВА / СПРАВА ПОЛНЫЕ ПОЛЯ. Затем я мог бы сказать генератору страниц, чтобы добавить строку заголовка, строку состояния, меню, таблицу, формы..., к конкретным клеткам. Затем каждая из этих ячеек может быть разделена на строки и столбцы на любую глубину. Макет страницы занимает несколько секунд для любого стиля.

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

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

Ресурс Мое Главное Меню
* определение: меню, m, уровень, метка, значок, действие;
m, 0, file;
М,1,открой,открой.gif, Диалог открытия файла;

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

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

Я Хотел Бы, Чтобы Мы Использовали Доменные Языки (DSLs) Больше

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

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

с точки зрения использования, если вы когда-либо использовали Ant, язык структурированных запросов (SQL) или каскадные таблицы стилей (CSS), вы использовали ЦИФРОВАЯ АБОНЕНТСКАЯ ЛИНИЯ.

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

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

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

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

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

  • SAP с AbAp
  • PeopleSoft с PeopleCode
  • Apple с Цель-С
  • Facebook имеет такие вещи, как FBML и FQL

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

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.