A предметный язык (DSL ) - это компьютерный язык специализированный для конкретного приложения домен. Это контрастирует с языком общего назначения (GPL), который широко применим во всех доменах. Существует широкий спектр DSL, начиная от широко используемых языков для общих доменов, таких как HTML для веб-страниц, до языков, используемых только одним или несколькими частями программного обеспечения, такими как MUSH программный код. DSL могут быть дополнительно подразделены по типу языка и включают в себя предметно-ориентированные языки разметки, предметно-ориентированные языки моделирования (в более общем смысле, языки спецификации ), и предметно-ориентированные языки программирования. Специализированные компьютерные языки всегда существовали в компьютерную эру, но термин «предметно-ориентированный язык» стал более популярным из-за развития предметно-ориентированного моделирования. Более простые DSL, особенно те, которые используются одним приложением, иногда неофициально называют мини-языками .
Граница между языками общего назначения и предметными языками не всегда четкая, поскольку язык может иметь специализированные функции для конкретная область, но может применяться более широко, или наоборот, в принципе может иметь широкое применение, но на практике используется в основном для конкретной области. Например, Perl изначально разрабатывался как язык обработки текста и склейки для той же области, что и AWK и сценарии оболочки, но в основном использовался как позже язык программирования общего назначения. В отличие от этого, PostScript является полным по Тьюрингу языком и в принципе может использоваться для любых задач, но на практике он узко используется как язык описания страниц.
Разработка и использование соответствующих DSL является ключевой частью домена Engineering с использованием языка, подходящего для данной области - это может состоять из использования существующего 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. Отдельная категория, известная как встроенные (или внутренние) языки, специфичные для домена, обычно реализуются в пределах основного языка в виде библиотеки и, как правило, ограничиваются синтаксисом основного языка, хотя это зависит от возможностей основного языка.
Существует несколько шаблонов использования для языков, зависящих от предметной области:
Многие предметно-ориентированные языки могут использоваться в более чем одним способом. Код DSL, встроенный в основной язык, может иметь особую поддержку синтаксиса, например регулярные выражения в sed, AWK, Perl или JavaScript, или может передаваться в виде строк.
Применение предметно-ориентированного подхода к разработке программного обеспечения связано как с рисками, так и с возможностями. Хорошо разработанному предметно-ориентированному языку удается найти правильный баланс между ними.
предметно-ориентированные языки имеют важные цели проектирования, которые контрастируют с целями языков общего назначения:
В программировании идиомы - это методы, навязанные программистами для решения общих задач разработки, например:
Языки программирования общего назначения редко поддерживают такие идиомы, но предметно-ориентированные языки могут их описывать, например:
Примеры языков, зависящих от предметной области, включают HTML, Logo для рисования карандашом, Verilog и VHDL описание оборудования языки iption, MATLAB и GNU Octave для матричного программирования, Mathematica, Maple и Maxima для символьная математика, язык спецификации и описания для реактивных и распределенных систем, электронные таблицы формулы и макросы, SQL для запросов к реляционной базе данных, YACC грамматики для создания синтаксических анализаторов, регулярных выражений для определения лексеров, Generic Eclipse Modeling System для создания языки диаграмм, Csound для синтеза звука и музыки, а также языки ввода GraphViz и GrGen, программные пакеты, используемые для макета графа и переписывание графов.
Язык сценариев GML, используемый GameMaker Studio, представляет собой предметно-ориентированный язык, ориентированный на начинающих программистов и позволяющий легко изучать программирование. Хотя этот язык представляет собой смесь нескольких языков, включая Delphi, C ++ и BASIC, отсутствуют структуры, типы данных и другие функции полноценный язык программирования. Многие из встроенных функций изолированы для облегчения переносимости. Язык в первую очередь служит для того, чтобы каждый мог легко освоить язык и разработать игру.
Unix сценарии оболочки дают хороший пример предметно-ориентированного языка для организации данных. Они могут манипулировать данными в файлах или пользовательским вводом разными способами. Абстракции и нотации домена включают потоки (такие как stdin и stdout) и операции с потоками (такие как перенаправление и конвейер). Эти абстракции в совокупности образуют надежный язык для описания потока и организации данных.
Язык состоит из простого интерфейса (сценария) для запуска и управления процессами, которые выполняют небольшие задачи. Эти задачи представляют собой идиомы организации данных в желаемом формате, таком как таблицы, графики, диаграммы и т. Д.
Эти задачи состоят из простого потока управления и строки механизмы манипулирования, которые охватывают множество общих применений, таких как поиск и замена string в файлах или подсчет вхождений строк (частотный подсчет).
Несмотря на то, что языки сценариев Unix завершены по Тьюрингу, они отличаются от языков общего назначения.
На практике языки сценариев используются для объединения небольших Инструменты Unix, такие как grep, ls, sort или wc.
ColdFusion, являются еще одним примером предметно-ориентированного языка для веб-сайтов, управляемых данными. Этот язык сценариев используется для объединения языков и служб, таких как Java,.NET, C ++, SMS, электронная почта, почтовые серверы, http, ftp, обмен, службы каталогов и файловые системы для использования на веб-сайтах.
Язык разметки ColdFusion (CFML) включает набор тегов, которые можно использовать на страницах ColdFusion для взаимодействия с источниками данных, управления данными и отображения вывода. Синтаксис тега CFML аналогичен синтаксису элемента HTML.
Открытая телекоммуникационная платформа Erlang изначально была разработана для использования внутри Ericsson в качестве предметно-ориентированного языка. Сам язык предлагает платформу библиотек для создания конечных автоматов, общих серверов и менеджеров событий, которые позволяют быстро развертывать приложения или поддерживать библиотеки, которые, как показали отраслевые тесты, превосходят другие языки, предназначенные для смешанного набора доменов., например C и C ++. Язык теперь официально является открытым исходным кодом и может быть загружен с их веб-сайта.
FilterMeister - это среда программирования с языком программирования, основанным на C, для конкретной цели создания Photoshop -совместимых надстроек фильтров обработки изображений. ; FilterMeister работает как плагин Photoshop и может загружать и выполнять сценарии или компилировать и экспортировать их как независимые плагины. Хотя язык FilterMeister воспроизводит значительную часть языка C и библиотеки функций, он содержит только те функции, которые могут использоваться в контексте плагинов Photoshop, и добавляет ряд конкретных функций, полезных только в этой конкретной области.
Функция шаблонов MediaWiki - это встроенный предметно-ориентированный язык, основной целью которого является поддержка создания шаблонов страниц и включение (включение по ссылке) страниц MediaWiki в другие страницы MediaWiki.
. Большой интерес вызывают предметно-ориентированные языки для повышения производительности и качества разработки программного обеспечения. Доменно-ориентированный язык, возможно, может предоставить надежный набор инструментов для эффективной разработки программного обеспечения. Такие инструменты начинают применяться при разработке критически важных программных систем.
Набор инструментов для снижения затрат на программное обеспечение является примером этого. Инструментарий представляет собой набор утилит, включая редактор спецификаций для создания спецификации требований, браузер графа зависимостей для отображения зависимостей переменных, а также для выявления пропущенных случаев в правильно сформированных формулах в спецификации, средство проверки моделей и средство доказательства теорем для проверки свойств программы на соответствие спецификации, а также генератор инвариантов, который автоматически создает инварианты на основе требований.
Более новой разработкой является языково-ориентированное программирование, интегрированная методология разработки программного обеспечения , основанная в основном на создании, оптимизации и использовании языков, специфичных для предметной области.
Дополняющие языково-ориентированное программирование, а также все другие формы предметно-ориентированных языков представляют собой класс инструментов написания компиляторов, называемых метакомпиляторами. Метакомпилятор не только полезен для создания парсеров и генераторов кода для языков, специфичных для предметной области, но и сам метакомпилятор компилирует предметно-ориентированный метаязык специально разработан для области метапрограммирования.
Помимо синтаксического анализа предметно-ориентированных языков, метакомпиляторы полезны для создания широкого спектра инструментов разработки и анализа программного обеспечения. Методология мета-компилятора часто встречается в системах преобразования программ.
Метакомпиляторы, которые сыграли значительную роль как в информатике, так и в компьютерной индустрии, включают Meta-II и его потомок TreeMeta.
Unreal и Unreal Tournament представили язык под названием UnrealScript. Это позволило быстро разработать модификации по сравнению с конкурентом Quake (с использованием движка Id Tech 2 ). В движке Id Tech использовался стандартный код C, что означало, что C нужно было изучить и правильно применить, в то время как UnrealScript был оптимизирован для простоты использования и эффективности. Точно так же при разработке более поздних игр были введены собственные специфические языки, еще одним распространенным примером является Lua для написания сценариев.
Различное Механизмы бизнес-правил были разработаны для автоматизации политик и бизнес-правил, используемых как в правительстве, так и в частном секторе. ILOG, Oracle Policy Automation, Drools и другие обеспечивают поддержку DSL, предназначенных для поддержки различных проблемных областей. доходит до определения интерфейса для использования нескольких DSL в наборе правил.
Целью механизмов бизнес-правил является определение представления бизнес-логики в максимально удобочитаемой форме. Это позволяет как экспертам, так и разработчикам работать и понимать одно и то же представление бизнес-логики. Большинство механизмов правил обеспечивают как подход к упрощению структур управления для бизнес-логики (например, с использованием декларативных правил или таблиц решений ), так и альтернативы синтаксису программирования в пользу DSL.
Разработчики статистического моделирования разработали предметно-ориентированные языки, такие как R (реализация языка S ), Ошибки, Jags и Stan. Эти языки предоставляют синтаксис для описания байесовской модели и создают метод ее решения с помощью моделирования.
Создание обработки объектов и сервисов на основе языка описания интерфейса для предметно-ориентированного языка, такого как JavaScript для веб-приложений, HTML для документации, C ++ для высокопроизводительного кода и т. Д. Это делается с помощью кросс-языковых платформ, таких как Apache Thrift или Google Protocol Buffers.
Gherkin is язык, предназначенный для определения тестовых примеров для проверки поведения программного обеспечения, без указания того, как это поведение реализовано. Он предназначен для чтения и использования нетехническими пользователями, использующими синтаксис естественного языка и линейно-ориентированный дизайн. Затем тесты, определенные с помощью Gherkin, должны быть реализованы на общем языке программирования. Затем шаги в программе Gherkin действуют как синтаксис для вызова метода, доступного не разработчикам.
К другим ярким примерам предметно-ориентированных языков относятся:
Некоторые из преимуществ:
Некоторые из недостатков:
| journal =
()|journal=
()