Доменно-ориентированный язык

редактировать

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

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

Содержание
  • 1 Использование
  • 2 Обзор
    • 2.1 При проектировании и реализации
    • 2.2 Инструменты программирования
  • 3 Темы по предметным языкам
    • 3.1 Внешние и встроенные специфичные для домена языки
    • 3.2 Шаблоны использования
    • 3.3 Цели разработки
    • 3.4 Идиомы
  • 4 Примеры
    • 4.1 Язык GameMaker
    • 4.2 Скрипты оболочки Unix
    • 4.3 Язык разметки ColdFusion
    • 4.4 Erlang OTP
    • 4.5 FilterMeister
    • 4.6 Шаблоны MediaWiki
    • 4.7 Разработка программного обеспечения использует
    • 4.8 Метакомпиляторы
    • 4.9 Unreal Engine до версии 4 и другие игры
    • 4.10 Механизмы правил для автоматизации политик
    • 4.11 Языки статистического моделирования
    • 4.12 Создание моделей и сервисов на несколько языков программирования
    • 4.13 Gherkin
    • 4.14 Другие примеры
  • 5 Преимущества и недостатки
  • 6 Инструменты для разработки предметно-ориентированного языка es
  • 7 См. также
  • 8 Ссылки
  • 9 Дополнительная литература
  • 10 Внешние ссылки
Использование

Разработка и использование соответствующих 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. Отдельная категория, известная как встроенные (или внутренние) языки, специфичные для домена, обычно реализуются в пределах основного языка в виде библиотеки и, как правило, ограничиваются синтаксисом основного языка, хотя это зависит от возможностей основного языка.

Шаблоны использования

Существует несколько шаблонов использования для языков, зависящих от предметной области:

  • Обработка с помощью автономных инструментов, вызываемых через прямую операцию пользователя, часто в командной строке или из Makefile (например,, grep для сопоставления регулярных выражений, sed, lex, yacc, набор инструментов GraphViz и т. д.)
  • предметно-зависимые языки, которые реализованы с использованием макросистем языка программирования и которые конвертируются или расширен до основного языка общего назначения во время компиляции или в реальном времени
  • встроенный предметно-ориентированный язык (eDSL ), реализован в виде библиотек, которые используют синтаксис своего основного языка общего назначения или его подмножества из них при добавлении предметно-ориентированных языковых элементов (типов данных, маршрутов прочие, методы, макросы и т. д.). (например, jQuery, React, Embedded SQL, LINQ )
  • Domain-specific languages, которые вызываются (во время выполнения) из программ, написанных в общем целевые языки, такие как C или Perl, для выполнения определенной функции, часто возвращая результаты операции на «главный» язык программирования для дальнейшей обработки; как правило, интерпретатор или виртуальная машина для предметно-ориентированного языка встроена в хост-приложение (например, строки формата, a)
  • Доменные языки, которые встроены в пользовательские приложения (например, макрос языков в электронных таблицах) и которые (1) используются для выполнения кода, написанного пользователями приложения, (2) динамически генерируемого приложением, или (3) и того, и другого.

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

Design goa ls

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

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

  • предметно-ориентированные языки менее всеобъемлющи.
  • предметно-ориентированные языки гораздо более выразительны в
  • предметно-ориентированные языки должны демонстрировать минимальную избыточность.

Идиомы

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

  • Убедитесь, что данные сохранены до закрытия окна.
  • Редактируйте код всякий раз, когда параметры командной строки меняются, потому что они влияют на поведение программы.

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

  • Сценарий может автоматически сохранять данные.
  • Язык, зависящий от предметной области, может параметризовать ввод командной строки.
Примеры

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

язык GameMaker

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

Сценарии оболочки Unix

Unix сценарии оболочки дают хороший пример предметно-ориентированного языка для организации данных. Они могут манипулировать данными в файлах или пользовательским вводом разными способами. Абстракции и нотации домена включают потоки (такие как stdin и stdout) и операции с потоками (такие как перенаправление и конвейер). Эти абстракции в совокупности образуют надежный язык для описания потока и организации данных.

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

Эти задачи состоят из простого потока управления и строки механизмы манипулирования, которые охватывают множество общих применений, таких как поиск и замена string в файлах или подсчет вхождений строк (частотный подсчет).

Несмотря на то, что языки сценариев Unix завершены по Тьюрингу, они отличаются от языков общего назначения.

На практике языки сценариев используются для объединения небольших Инструменты Unix, такие как grep, ls, sort или wc.

язык сценариев ColdFusion Markup Language

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

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

Erlang OTP

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

FilterMeister

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

Шаблоны MediaWiki

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Стоимость изучение нового языка по сравнению с его ограниченной применимостью
  • Стоимость разработки, внедрения и поддержки предметно-ориентированного языка, а также инструментов, необходимых для разработки с его помощью (IDE )
  • Поиск, настройка, и поддержание надлежащего объема.
  • Трудность балансирования компромиссов между специфичностью предметной области и конструкциями языка программирования общего назначения.
  • Потенциальная потеря процессора эффективности по сравнению с ручным- закодированное программное обеспечение.
  • Распространение подобных нон-ов стандартные предметно-ориентированные языки, например, DSL, используемый в одной страховой компании, по сравнению с DSL, используемый в другой страховой компании.
  • Нетехническим специалистам в предметной области может быть трудно писать или изменять программы DSL самостоятельно.
  • Повышенная сложность интеграции DSL с другими компонентами ИТ-системы (по сравнению с интеграцией с языком общего назначения).
  • Низкое количество экспертов в конкретном DSL ведет к увеличению затрат на рабочую силу.
  • Сложнее найти примеры кода.
Инструменты для разработки предметно-ориентированных языков
  • JetBrains MPS - это инструмент для разработки предметно-ориентированных языков. Он использует, что позволяет преодолевать ограничения языковых парсеров и создавать редакторы DSL, например, с таблицами и диаграммами. Он реализует языково-ориентированное программирование. MPS объединяет среду для определения языка, языковую рабочую среду и интегрированную среду разработки (IDE) для таких языков.
  • Xtext - это программная среда с открытым исходным кодом для разработки языков программирования и предметной области. -специфические языки (DSL). В отличие от стандартных генераторов парсеров, Xtext генерирует не только парсер, но и модель классов для абстрактного синтаксического дерева. Кроме того, он предоставляет полнофункциональную настраиваемую среду IDE на основе Eclipse.
  • Racket - это кроссплатформенный языковой набор инструментов, включающий компилятор, JIT-компилятор, IDE и инструменты командной строки, предназначенные для создания как языков, специфичных для предметной области, так и полностью новые языки.
См. также
Ссылки
Дополнительная литература
Внешние ссылки
статей
Последняя правка сделана 2021-05-17 11:34:41
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте