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, обычно являются языками моделирования общего назначения.

Подводя итог, можно провести аналогию: «Очень маленький язык» подобен ножу, который можно использовать тысячами разных способов: от резки еды до вырубки деревьев. [ необходимы разъяснения ] Предметно-ориентированный язык подобен электрической дрели: это мощный инструмент с широким спектром применений, но с конкретным контекстом, а именно с проделыванием дыр в вещах. Язык общего назначения — это полноценный инструментарий с множеством инструментов, предназначенных для выполнения самых разных задач. Языки, специфичные для предметной области, должны использоваться программистами, которые, глядя на свою текущую рабочую среду, понимают, что им нужна более детальная подготовка, и обнаруживают, что конкретный язык, специфичный для предметной области, обеспечивает именно это. [ нужна цитата ]

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

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

DSL, реализованные через независимый интерпретатор или компилятор, известны как языки, специфичные для внешнего домена . Хорошо известные примеры включают LaTeX или 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 , ему не хватает структур, типов данных и других функций полноценного языка программирования. Многие встроенные функции изолированы в песочнице для удобства переносимости. Язык в первую очередь служит для того, чтобы каждый мог легко освоить язык и разработать игру.

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

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

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

Эрланг ОТП

Платформа Erlang Open Telecom изначально была разработана для использования внутри Ericsson в качестве предметно-ориентированного языка. Сам язык предлагает платформу библиотек для создания конечных автоматов, универсальных серверов и менеджеров событий, которые позволяют инженеру быстро развертывать приложения или поддерживать библиотеки, которые, как показали отраслевые тесты, превосходят другие языки, предназначенные для смешанного набора областей. , такие как C и C++. Теперь язык официально имеет открытый исходный код, и его можно загрузить с их веб-сайта.

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

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

Шаблоны Медиавики

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

Использование в разработке программного обеспечения

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

Примером этого является набор инструментов для снижения затрат на программное обеспечение [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 .

корнишон

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

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

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

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

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

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

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

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

Рекомендации

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

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

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

Статьи