Jump to content

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

Доменно -ориентированный язык ( 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]

  • Обработка с помощью автономных инструментов, вызываемых посредством прямых операций пользователя, часто из командной строки или из файла Makefile (например, grep для сопоставления регулярных выражений, sed, lex, yacc, набора инструментов GraphViz и т. д.).
  • Специализированные для предметной области языки, которые реализованы с использованием макросистем языков программирования и которые преобразуются или расширяются в основной язык общего назначения во время компиляции или в реальном времени.
  • Встроенный предметно-ориентированный язык ( eDSL ) [4] также известные как внутренний предметно-ориентированный язык , реализуются как библиотеки для общего «хостового» языка программирования. Встроенный предметно-ориентированный язык использует синтаксис, семантику и среду выполнения (последовательность, условия, итерации, функции и т. д.) и добавляет предметно-ориентированные примитивы, которые позволяют программистам использовать «главный» язык программирования для создания программ, генерирующих код в «целевой» язык программирования. Несколько eDSL можно легко объединить в одну программу, а возможности основного языка расширяют существующий eDSL. Другими преимуществами использования eDSL могут быть улучшенная безопасность типов и улучшенные IDE инструменты . (например, SQLAlchemy «Core» для SQL eDSL в Python , jOOQ для SQL eDSL в Java , C «синтаксис метода» LINQ для SQL eDSL в # , kotlinx.html для HTML eDSL в Kotlin )
  • Специализированные для предметной области языки, которые вызываются (во время выполнения) из программ, написанных на языках общего назначения, таких как C или Perl , для выполнения определенной функции, часто возвращая результаты операции на «хост» язык программирования для дальнейшей обработки; как правило, интерпретатор или виртуальная машина для предметно-ориентированного языка встроена в хост-приложение (например, строки формата , механизм регулярных выражений )
  • Специализированные для предметной области языки, которые встроены в пользовательские приложения (например, макроязыки в электронных таблицах) и которые (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, обмен, службы каталогов и файловые системы, для использования на веб-сайтах.

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

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

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

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 ), Багс , Джагс и Стэн . Эти языки предоставляют синтаксис для описания байесовской модели и генерируют метод ее решения с помощью моделирования.

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

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

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

корнишон

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

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

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

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

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

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

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

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

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

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

  • Стоимость изучения нового языка
  • Ограниченная применимость
  • Стоимость проектирования, внедрения и поддержки предметно-ориентированного языка, а также инструментов, необходимых для разработки с его помощью ( IDE ).
  • Поиск, настройка и поддержание надлежащего объема.
  • Сложность поиска компромисса между предметной специфичностью и конструкциями языка программирования общего назначения.
  • Потенциальная потеря эффективности процессора по сравнению с программным обеспечением, написанным вручную.
  • Распространение подобных нестандартных языков, специфичных для предметной области, например, DSL, используемый в одной страховой компании, по сравнению с DSL, используемым в другой страховой компании. [10]
  • Нетехническим экспертам в предметной области может быть сложно писать или модифицировать программы DSL самостоятельно. [8]
  • Повышенная сложность интеграции DSL с другими компонентами ИТ-системы (по сравнению с интеграцией с языком общего назначения).
  • Недостаточное количество экспертов в конкретном DSL приводит к увеличению затрат на рабочую силу.
  • Сложнее найти примеры кода.

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

[ редактировать ]
  • JetBrains MPS — это инструмент для разработки предметно-ориентированных языков. Он использует проекционное редактирование , которое позволяет преодолеть ограничения языковых анализаторов и создавать редакторы DSL, например, с таблицами и диаграммами. Он реализует языково-ориентированное программирование. MPS сочетает в себе среду определения языка, языковую среду и интегрированную среду разработки (IDE) для таких языков. [11]
  • MontiCore — это языковая среда для эффективной разработки предметно-ориентированных языков. Он обрабатывает расширенный формат грамматики, определяющий DSL, и генерирует компоненты Java для обработки документов DSL. [12]
  • Xtext — это программная среда с открытым исходным кодом для разработки языков программирования и предметно-ориентированных языков (DSL). В отличие от стандартных генераторов синтаксических анализаторов, Xtext генерирует не только анализатор, но и модель классов для абстрактного синтаксического дерева. Кроме того, он предоставляет полнофункциональную настраиваемую интегрированную среду разработки на базе Eclipse. [13] Проект был заархивирован в апреле 2023 года.
  • Racket  — это кроссплатформенный набор языковых инструментов, включающий собственный код, JIT-компилятор и компилятор Javascript, IDE (в дополнение к поддержке Emacs, Vim, VSCode и других) и инструменты командной строки, предназначенные для создания языков как предметной области, так и общего назначения. [14] [15]

См. также

[ редактировать ]
  1. ^ Фаулер, Мартин; Парсонс, Ребекка. «Языки предметной области» . Проверено 6 июля 2019 г.
  2. ^ Перейти обратно: а б Марьян Мерник, Ян Хиринг и Энтони М. Слоан. Когда и как разрабатывать предметно-ориентированные языки. ACM Computing Surveys , 37(4):316–344, 2005. дои : 10.1145/1118890.1118892
  3. ^ Перейти обратно: а б Диомидис Спинеллис. Известные шаблоны проектирования для языков, специфичных для предметной области . Журнал систем и программного обеспечения , 56 (1): 91–99, февраль 2001 г. два : 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. ^ Перейти обратно: а б Фройденталь, Маргус (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 г.

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

[ редактировать ]
[ редактировать ]
Статьи
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a84fae490e52b8ee4c850993e67ccdbd__1722874980
URL1:https://arc.ask3.ru/arc/aa/a8/bd/a84fae490e52b8ee4c850993e67ccdbd.html
Заголовок, (Title) документа по адресу, URL1:
Domain-specific language - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)