stringtranslate.com

Язык, специфичный для предметной области

Язык , специфичный для домена ( DSL ) — это компьютерный язык, специализированный для определенного домена приложения . Это контрастирует с языком общего назначения ( GPL ), который широко применяется в разных доменах. Существует большое разнообразие DSL, начиная от широко используемых языков для общих доменов, таких как HTML для веб-страниц, и заканчивая языками, используемыми только одним или несколькими частями программного обеспечения, такими как программный код MUSH . DSL можно дополнительно подразделить по типу языка и включать в себя языки разметки , специфичные для домена языки моделирования (в более общем смысле, языки спецификаций ) и языки программирования , специфичные для домена . Специализированные компьютерные языки всегда существовали в компьютерную эпоху, но термин «язык, специфичный для домена» стал более популярным из-за роста моделирования, специфичного для домена . Более простые DSL, особенно те, которые используются одним приложением, иногда неофициально называют мини-языками .

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

Использовать

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

Обзор

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

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

В разработке и реализации

Предметно-ориентированные языки — это языки (или часто объявленные синтаксисы или грамматики) с очень конкретными целями в разработке и реализации. Предметно-ориентированный язык может быть одним из визуальных языков диаграмм, таких как те, которые созданы Generic Eclipse Modeling System , программных абстракций, таких как Eclipse Modeling Framework , или текстовых языков. Например, утилита командной строки grep имеет синтаксис регулярных выражений , который сопоставляет шаблоны в строках текста. Утилита sed определяет синтаксис для сопоставления и замены регулярных выражений. Часто эти крошечные языки могут использоваться вместе внутри оболочки для выполнения более сложных задач программирования.

Граница между доменно-специфичными языками и скриптовыми языками несколько размыта, но доменно-специфичные языки часто не имеют низкоуровневых функций для доступа к файловой системе, межпроцессного управления и других функций, которые характеризуют полнофункциональные языки программирования, скриптовые или иные. Многие доменно-специфичные языки не компилируются в байт-код или исполняемый код, а в различные виды медиа-объектов: GraphViz экспортирует в PostScript , GIF , JPEG и т. д., где Csound компилирует в аудиофайлы, а доменно-специфичный язык трассировки лучей, такой как POV, компилируется в графические файлы.

Языки определения данных

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

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

Инструменты программирования

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

В инженерии на основе моделей можно найти много примеров доменно-специфических языков, таких как OCL , язык для декорирования моделей с помощью утверждений, или QVT , доменно-специфический язык преобразований. Однако такие языки, как UML, обычно являются языками моделирования общего назначения.

Подводя итог, можно привести аналогию: Very Little Language подобен ножу, который можно использовать тысячами разных способов, от нарезки еды до рубки деревьев. [ требуется пояснение ] Предметно-ориентированный язык подобен электродрели: это мощный инструмент с широким спектром применения, но в определенном контексте, а именно, для сверления отверстий в вещах. Универсальный язык — это полноценный верстак с множеством инструментов, предназначенных для выполнения различных задач. Предметно-ориентированные языки должны использоваться программистами, которые, глядя на свой текущий верстак, понимают, что им нужна лучшая дрель, и обнаруживают, что конкретный предметно-ориентированный язык обеспечивает именно это. [ требуется цитата ]

Темы языка, специфичные для домена

Внешние и встроенные доменно-специфические языки

DSL, реализованные через независимый интерпретатор или компилятор, известны как Внешние доменно-специфические языки . Известные примеры включают TeX или AWK. Отдельная категория, известная как Встроенные (или Внутренние) доменно-специфические языки , обычно реализуется в базовом языке в виде библиотеки и, как правило, ограничивается синтаксисом базового языка, хотя это зависит от возможностей базового языка. [1]

Модели использования

Существует несколько моделей использования доменно-специфических языков: [2] [3]

Многие предметно-ориентированные языки можно использовать несколькими способами. [ необходима ссылка ] Код DSL, встроенный в базовый язык, может иметь специальную поддержку синтаксиса, например регулярные выражения в sed, AWK, Perl или JavaScript, или может передаваться в виде строк.

Цели дизайна

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

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

Идиомы

В программировании идиомы — это методы, применяемые программистами для решения общих задач разработки, например:

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

Примеры

Примерами языков программирования, ориентированных на определенную область, являются HTML , Logo для рисования карандашом, языки описания оборудования Verilog и VHDL , MATLAB и GNU Octave для матричного программирования, Mathematica , Maple и Maxima для символьной математики , язык спецификаций и описаний для реактивных и распределенных систем, формулы и макросы электронных таблиц , SQL для запросов к реляционным базам данных , грамматики YACC для создания парсеров , регулярные выражения для указания лексеров , Generic Eclipse Modeling System для создания языков диаграмм, Csound для синтеза звука и музыки и языки ввода GraphViz и GrGen , программные пакеты, используемые для компоновки и переписывания графов , язык конфигурации Hashicorp, используемый для Terraform и других инструментов Hashicorp , Puppet также имеет свой собственный язык конфигурации.

Язык GameMaker

Язык сценариев GML, используемый GameMaker Studio, является предметно-ориентированным языком, ориентированным на начинающих программистов, чтобы иметь возможность легко изучить программирование. Хотя язык служит смесью нескольких языков, включая Delphi , C++ и BASIC . Большинство функций в этом языке после компиляции фактически вызывают функции времени выполнения, написанные на языке, специфичном для целевой платформы, поэтому их окончательная реализация не видна пользователю. Язык в первую очередь служит для того, чтобы облегчить любому человеку выбор языка и разработку игры, и благодаря среде выполнения GM, которая обрабатывает основной игровой цикл и сохраняет реализацию вызываемых функций, для простейшей игры требуется несколько строк кода вместо тысяч.

Язык разметки ColdFusion

Связанный язык сценариев ColdFusion — еще один пример языка, специфичного для домена, для веб-сайтов, управляемых данными. Этот язык сценариев используется для объединения языков и служб, таких как Java, .NET, C++, SMS, электронная почта, серверы электронной почты, http, ftp, exchange, службы каталогов и файловые системы для использования на веб-сайтах.

Язык разметки ColdFusion (CFML) включает набор тегов, которые можно использовать на страницах ColdFusion для взаимодействия с источниками данных, манипулирования данными и отображения вывода. Синтаксис тегов CFML похож на синтаксис элемента HTML.

ФильтрМайстер

FilterMeister — это среда программирования с языком программирования, основанным на C, для конкретной цели создания совместимых с Photoshop плагинов фильтров обработки изображений; FilterMeister работает как плагин Photoshop и может загружать и выполнять скрипты или компилировать и экспортировать их как независимые плагины. Хотя язык FilterMeister воспроизводит значительную часть языка C и библиотеки функций, он содержит только те функции, которые могут использоваться в контексте плагинов Photoshop, и добавляет ряд специфических функций, полезных только в этой конкретной области.

Шаблоны MediaWiki

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

Программная инженерия использует

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

Примером этого является Software Cost Reduction Toolkit [5] . Набор инструментов представляет собой набор утилит, включающий редактор спецификаций для создания спецификации требований , браузер графа зависимостей для отображения зависимостей переменных, средство проверки согласованности для обнаружения пропущенных случаев в правильно сформированных формулах в спецификации, средство проверки моделей и средство доказательства теорем для проверки свойств программы на соответствие спецификации, а также генератор инвариантов, который автоматически создает инварианты на основе требований.

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

Метакомпиляторы

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

Помимо анализа доменно-специфических языков, метакомпиляторы полезны для создания широкого спектра инструментов для разработки и анализа программного обеспечения. Методология метакомпилятора часто встречается в системах преобразования программ .

Метакомпиляторы, сыгравшие значительную роль как в компьютерной науке , так и в компьютерной индустрии, включают Meta-II [6] и его потомка TreeMeta [7] .

Unreal Engine до версии 4 и другие игры

Unreal и Unreal Tournament представили язык под названием UnrealScript . Это позволило быстро разрабатывать модификации по сравнению с конкурентом Quake (использующим движок Id Tech 2 ). Движок Id Tech использовал стандартный код C , что означало, что C нужно было изучить и правильно применять, в то время как UnrealScript был оптимизирован для простоты использования и эффективности. Аналогично, разработка более поздних игр представила свои собственные специфические языки, еще одним распространенным примером является Lua для написания скриптов. [ необходима цитата ]

Механизмы правил для автоматизации политик

Различные механизмы бизнес-правил были разработаны для автоматизации политик и бизнес-правил, используемых как в государственном, так и в частном секторе. ILOG , Oracle Policy Automation , DTRules, Drools и другие обеспечивают поддержку DSL, направленных на поддержку различных проблемных областей. DTRules заходит так далеко, что определяет интерфейс для использования нескольких DSL в наборе правил.

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

Статистические языки моделирования

Статистические моделисты разработали доменно-специфические языки, такие как R (реализация языка S ), Bugs , Jags и Stan . Эти языки предоставляют синтаксис для описания байесовской модели и генерируют метод ее решения с использованием моделирования.

Создание модели и сервисов для нескольких языков программирования

Генерировать обработку объектов и сервисы на основе языка описания интерфейса для предметно-ориентированного языка, такого как JavaScript для веб-приложений, HTML для документации, C++ для высокопроизводительного кода и т. д. Это выполняется с помощью кросс-языковых фреймворков, таких как Apache Thrift или Google Protocol Buffers .

Корнишон

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

Другие примеры

Другие яркие примеры предметно-ориентированных языков включают в себя:

Преимущества и недостатки

Некоторые из преимуществ: [2] [3]

Некоторые из недостатков:

Инструменты для разработки предметно-ориентированных языков

Смотрите также

Ссылки

  1. ^ Фаулер, Мартин; Парсонс, Ребекка. «Доменно-специфические языки» . Получено 6 июля 2019 г.
  2. ^ ab Марьян Мерник, Ян Хиринг и Энтони М. Слоан. Когда и как разрабатывать предметно-ориентированные языки. ACM Computing Surveys , 37(4):316–344, 2005. doi :10.1145/1118890.1118892
  3. ^ ab Diomidis Spinellis. Известные шаблоны проектирования для предметно-ориентированных языков. Journal of Systems and Software , 56(1):91–99, февраль 2001 г. doi :10.1016/S0164-1212(00)00089-3
  4. ^ Феллейзен, Маттиас; Финдлер, Роберт Брюс; Флэтт, Мэтью; Кришнамурти, Шрирам; Барзилай, Эли; Маккарти, Джей; Тобин-Хохштадт, Сэм (март 2018 г.). «Программируемый язык программирования». Communications of the ACM . 61 (3): 62–71. doi :10.1145/3127323. S2CID  3887010 . Получено 15 мая 2019 г. .
  5. ^ Heitmeyer, C. (1999). «Использование набора инструментов SCR* для указания требований к программному обеспечению» (PDF) . Труды. 2-й семинар IEEE по методам формальной спецификации промышленной прочности . IEEE. стр. 12–13. doi :10.1109/WIFT.1998.766290. ISBN 0-7695-0081-1. S2CID  16079058. Архивировано из оригинала (PDF) 2004-07-19.
  6. ^ Шорре, Д. В. (1964). «META II — язык написания компиляторов, ориентированный на синтаксис». Труды 19-й национальной конференции ACM 1964 года . С. 41.301–41.3011. doi :10.1145/800257.808896. S2CID  43144779.
  7. ^ Карр, К. Стивен; Лютер, Дэвид А.; Эрдманн, Шериан (1969). «Система компилятора TREE-META: система метакомпилятора для Univac 1108 и General Electric 645». Технический отчет Университета Юты RADC-TR-69-83 . Архивировано из оригинала 1 февраля 2020 г.
  8. ^ ab Freudenthal, Margus (1 января 2009 г.). «Доменно-специфические языки в таможенной информационной системе». IEEE Software : 1. doi :10.1109/MS.2009.152.
  9. ^ Арам, Майкл; Нойманн, Густав (2015-07-01). "Многослойный анализ совместной разработки бизнес-информационных систем" (PDF) . Журнал Internet Services and Applications . 6 (1). doi : 10.1186/s13174-015-0030-8 . S2CID  16502371.
  10. ^ Миотто, Эрик. "Об интеграции предметно-ориентированных и научных знаний в Model Driven Engineering" (PDF) . Архивировано из оригинала (PDF) 2011-07-24 . Получено 2010-11-22 .
  11. ^ «JetBrains MPS: Создатель предметно-ориентированного языка».
  12. ^ "МонтиКор".
  13. ^ "Xтекст".
  14. ^ Тобин-Хохштадт, С.; Сент-Амур, В.; Калпеппер, Р.; Флэтт, М.; Феллейзен, М. (2011). "Языки как библиотеки" (PDF) . Проектирование и реализация языков программирования .
  15. ^ Флэтт, Мэтью (2012). «Создание языков в Racket». Сообщения ACM . Получено 2012-04-08 .

Дальнейшее чтение

Внешние ссылки

Статьи

Смотрите также