Статьи

Полное руководство по (внешним) доменным языкам

Это руководство покажет вам:

  • Что : после определения мы рассмотрим 19 примеров DSL
  • почему : каковы конкретные преимущества, которые вы можете достичь с помощью DSL
  • Как : мы обсудим различные способы создания DSL и каковы факторы успеха

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

Только одно: здесь мы стараемся быть практичными и понятными. Если вы ищете формальные определения и теоретические дискуссии, это не то место.

Что такое доменные языки?

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

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

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

Хорошо, но что это означает на практике? Как выглядят DSL? Давайте посмотрим множество примеров.

19 примеров того, как доменные языки

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

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

1. DOT — DSL для определения графиков

DOT — это язык, который может описывать графики, направленные или не направленные.

1
2
3
4
digraph graphname { 
yellow -> orange -> red; 
orange -> green;
}

Из этого описания могут быть сгенерированы изображения, представляющие эти графики. Для этого вы используете программу с именем graphviz , которая работает с языком DOT. Из предыдущего примера вы получите это:

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

2. PlantUML — DSL для рисования диаграмм UML

PlantUML Может использоваться для определения диаграмм UML разных видов. Например, мы можем определить диаграмму последовательности.

1
2
3
4
5
6
7
8
@startuml
actor MyUser   
actor CustomerCare 
database database 
MyUser -> CustomerCare : Ask a refund   
CustomerCare -> database : Verify the data 
CustomerCare -> MyUser : Issue a refund 
@enduml

Из этого определения мы можем получить картину.

Изображение сгенерировано с помощью PlantUML DSL

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

3. Sed — DSL для определения преобразования текста

В UNIX-подобных операционных системах (Linux, Mac, BSD и т. Д.) Существует набор инструментов командной строки, каждый из которых принимает инструкции в своем собственном формате. Этот формат можно считать DSL, который позволяет указывать задачи, которые должны быть выполнены. Например, sed выполняет преобразования текста, указанные с использованием собственного DSL.

Вы хотите заменить слово «Джек» словом «Джон»?

1
s/Jack/John/g

Или вы хотите удалить все строки файла из строки 10, пока не будет найдено слово «stophere»?

1
10,/stophere/d

Технический уровень, необходимый для овладения данным DSL, повышен. Однако многие опытные пользователи компьютеров могут научиться основам выполнения общих операций над файлами. Небольшие вещи, которые они могли бы делать каждый день и которые в настоящее время делают вручную. Например, вы можете иметь шаблоны электронной почты, содержащие заполнители, такие как «{FIRST_NAME}», и заменить их соответствующим тестом с помощью одной из этих команд.

4. Gawk — DSL для печати и обработки текста

Как и sed, gawk — это еще одна утилита UNIX, принимающая команды на своем языке. Например, вы можете напечатать все строки данного файла длиной более 80 символов: