Что такое DSL в программировании

Обновлено: 05.07.2024

План North American Electric Reliability Corporation по защите критически важной инфраструктуры (NERC CIP) представляет собой набор стандартов.

Структура управления рисками ISO 31000 – это международный стандарт, который предоставляет компаниям рекомендации и принципы для .

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

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

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

Метаморфное и полиморфное вредоносное ПО – это два типа вредоносных программ (вредоносных программ), код которых может изменяться по мере их распространения.

Медицинская транскрипция (МТ) – это ручная обработка голосовых сообщений, продиктованных врачами и другими медицинскими работниками.

Электронное отделение интенсивной терапии (eICU) — это форма или модель телемедицины, в которой используются самые современные технологии.

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

Снижение рисков – это стратегия подготовки к угрозам, с которыми сталкивается бизнес, и уменьшения их последствий.

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

Синхронная репликация — это процесс копирования данных по сети хранения, локальной или глобальной сети, поэтому .

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

Износ флэш-памяти NAND — это пробой оксидного слоя внутри транзисторов с плавающим затвором флэш-памяти NAND.

Выносливость при записи — это количество циклов программирования/стирания (P/E), которое может быть применено к блоку флэш-памяти перед сохранением .

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

DSL бывают двух основных видов: внешние и внутренние. Внешний DSL — это язык, который анализируется независимо от основного языка общего назначения: хорошими примерами являются регулярные выражения и CSS. Внешние DSL имеют сильную традицию в сообществе Unix. Внутренние DSL — это особая форма API на основном языке общего назначения, часто называемая плавным интерфейсом. То, как фиктивные библиотеки, такие как JMock, определяют ожидания для тестов, являются хорошими примерами этого, как и многие механизмы, используемые Ruby on Rails. Внутренние DSL также имеют давнюю традицию использования, особенно в сообществе Lisp.

Люди находят DSL ценными, потому что с хорошо спроектированным DSL гораздо проще программировать, чем с традиционной библиотекой. Это повышает производительность программиста, что всегда ценно. В частности, это также может улучшить общение с экспертами в предметной области, что является важным инструментом для решения одной из самых сложных проблем в разработке программного обеспечения. CSS — отличный пример этого, большинство людей, которые программируют CSS, не считают себя программистами. Однако, несмотря на это, я обычно не думаю, что конечные пользователи обычно будут напрямую писать в DSL — важно улучшение связи.

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

Как и P из EAA, эта книга представляет собой двустороннюю книгу, в которой есть как повествование для изучения DSL, так и справочник для деталей, поэтому не пугайтесь большого количества страниц. Вы можете получить хорошее представление о теме, прочитав описательный раздел (142 страницы) и использовать остальную часть как справку, чтобы погрузиться в нее, когда вам это нужно.

Доступны электронные копии этой книги. У Amazon есть версия для Kindle. InformIT имеет версии в формате epub и pdf. У Apple есть версия epub в ibookstore.

Думаю, я ищу какое-нибудь вступление и смотрю, использовал ли его кто-нибудь. Есть ли какие-то особые преимущества его использования?

предметно-ориентированный язык (DSL) — это язык программирования или язык спецификаций, предназначенный для конкретной предметной области, определенного метода представления проблемы и/или определенного метода решения.

Кто-нибудь может привести конкретные примеры того, как вы это реализовали или как это может быть полезно в данном сценарии?


На самом деле предметно-ориентированный язык — это термин с четко определенным значением в программировании. См. статью в Википедии

На грани, но я бы не стал. R имеет все структуры общего назначения и используется для широкого круга вычислений; числовые вычисления и статистика — не очень узкая область. Тем не менее, это хорошая проверка определения.

14 ответов 14

Специфический для предметной области язык — это язык, написанный для решения конкретной предметной области или набора задач. Их много, например, make, ant и rake для описания сборки программного обеспечения или lexx и yacc для построения языка. В последние годы они стали популярными, поскольку некоторые вещи были объединены, чтобы упростить их сборку. Важным среди этих факторов является растущая популярность Ruby, который имеет несколько функций, упрощающих создание новых DSL.

Мартин Фаулер, как и здесь, большой сторонник этой идеи.



@CharlieMartin, не могли бы вы рассказать мне о "отличном"? какой именно язык? Я хочу знать, пожалуйста, помогите здесь..

Я хотел бы добавить Gradle groovy. Если не ошибаюсь, у них свой язык описания сборки.

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

Примеры DSL включают в себя все языки запросов (SQL, XPath, . ), все языки шаблонов (Django, Smarty, . ), сценарии оболочки, особенно включая такие вещи, как twill, управляемый командами веб-браузер (в основном используемый для автоматизированного тестирования). , языки хранения и обмена данными (XML, YAML, . ) и языки документов, такие как LaTex, HTML или CSS.

Некоторые языки с очень гибким синтаксисом, такие как TCL и Lisp, встраивают свои DSL непосредственно в язык. когда возможно. В большинстве языков используются строки, обычно загружаемые из внешних файлов.

Есть ли какие-то особые преимущества в их использовании? Использование их по прямому назначению очень выгодно, поскольку вы будете обращаться к ним, не зная об этом, точно так же, как вы использовали (я полагаю) SQL или HTML, не думая о них как о DSL.

Я осмелюсь сказать, что существует достаточно DSL для любых приложений, которые могут вам понадобиться; вам почти наверняка не нужно учиться писать свои собственные.

(обращаясь к сути вопроса)

Кажется, когда я впервые где-то увидел DSL и его определение как "предметно-ориентированный язык", я также подумал, что это конкретный, конкретный язык, о котором я просто не слышал, но, нет, это общий термин для языков, предназначенных для конкретной области применения.

По иронии судьбы, если бы вы только что услышали о TCL как о "командном языке инструментов", вы могли бы подумать, что, подобно DSL, существует множество TCL для различных инструментов, но нет, это конкретное название конкретного сценария. язык.

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

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

Все является DSL.

Ассемблер: MOV от R1 до R2
Компиляторы: операторы присваивания — A = A + 1, условные операторы — IF (TRUE) . Ветвь -- ВОЗВРАТ
HTML: . описание вложенной структуры
TCP/IP: описание адресатов/от них
PDF: описание размещения текста/изображения на бумаге
Шрифты: описание символов

Любой язык, который мы используем для описания определенного процесса, является DSL. К сожалению, не хватает предметно-ориентированных языков для описания даже наших самых основных процессов, поэтому мы используем те немногие языки, которые у нас есть, для описания всего, что мы делаем. "Заархивировать все html-файлы на моем веб-сайте" требует 300 строк на 3 или 4 разных языках.

Чтобы построить DSL, определите минимальное количество символов, необходимое для описания процесса, который вы можете запомнить и не требует документации. Помните, что скорость и простота использования являются основными критериями проектирования.Синтаксический анализ выполняется настолько быстро, что любой синтаксис, который вы используете, подходит. В большинстве случаев я предпочитаю естественный язык в качестве синтаксиса: «Платите сотрудникам в начале месяца», но специфичный для домена — это просто конкретный домен, вы сами определяете синтаксис, который лучше всего подходит к проблеме.

Я бы воздержался от использования других решений, которые могут быть удобными, но не подходящими для решения проблемы, например HTML, который использовался для определения данных (XML). CSV очень полезен, он подходит для большинства задач. JSON не подходит для простоты использования, это излишество, которое добавляет ненужные сложности, тогда как CSV работает для большинства проблем. Мы часто используем EXCEL для DSL, он отлично подходит для описания небольших проблем, от 65K до 1M строк, таких как древовидная структура или меню, столбец A — это уровень, другие столбцы — это значки, цвета, метки и т. д. (EXCEL — это редактируемый файл CSV).

Я обнаружил, что HTML на самом деле не решает проблему макета страницы, поэтому я избавился от него и определил подходящий DSL. Я определил 6 областей на странице: HEADER, BODY, FOOTER, LEFT/RIGHT MARGINS и LEFT/RIGHT FULL MARGINS. Затем я мог бы сказать генератору страниц добавить ЗАГОЛОВОК, СТАТУС, МЕНЮ, ТАБЛИЦУ, ФОРМЫ. к конкретным клеткам. Затем каждая из этих ячеек может быть разделена на строки и столбцы любой глубины. Макет страницы занимает несколько секунд для любого стиля.

BODY содержит таблицу моих сотрудников
HEADER содержит заголовок строки заголовка «Hello World» с входом в Collins Software

DSL меню не соответствует DSL макета страницы, поэтому я создал уникальный DSL для меню.

Ресурс Мое главное меню
*define:menu,m,Level,Label,Icon,Action;
m,0,файл;
m,1,open,open.jpg,Диалог Открыть файл;

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

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

Используемые языки программирования

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

ЦСЛ не пытается угодить всем. Вместо этого он создан для ограниченной сферы применимости и использования, но достаточно мощен, чтобы представлять и решать проблемы и решения в этой сфере. Хорошим примером DSL является HTML. Это язык для домена веб-приложений. Его нельзя использовать, скажем, для обработки чисел, но ясно, насколько широко HTML используется в Интернете.

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

Классификация DSL

В мире DSL есть два типа языков:

  • Доменный язык (DSL): язык, на котором написан или представлен DSL
  • Основной язык: язык, на котором выполняется или обрабатывается DSL.

DSL, написанный на другом языке и обработанный на другом основном языке, называется внешним DSL.

Это DSL на языке SQL, который можно обрабатывать на основном языке:

Если на то пошло, DSL можно написать на английском языке с определенным словарем и формой, которые можно обрабатывать на другом основном языке с помощью генератора синтаксических анализаторов, такого как ANTLR:

Если DSL и хост-язык совпадают, то тип DSL является внутренним, где DSL записывается в семантике языка и обрабатывается им. Их также называют встроенными DSL. Вот два примера.

    DSL Bash, который может выполняться в движке Bash:

Это действительный Bash, написанный как английский.

Здесь используется беглый стиль, и он читается так же, как английский.

Да, границы между DSL и GPL иногда стираются.

Примеры DSL

Некоторые языки, используемые для DSL, включают:

Почему DSL?

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

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

Плюсы и минусы DSL

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

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

Варианты программного обеспечения DSL

Программирование и разработка

Возможности программного обеспечения DSL с открытым исходным кодом включают:

  • Xtext: Xtext позволяет разрабатывать DSL и интегрируется с Eclipse. Это делает возможной генерацию кода и используется несколькими продуктами с открытым исходным кодом и коммерческими продуктами для предоставления определенных функций. MADS (многоцелевая система сельскохозяйственных данных) — интересная идея, основанная на Xtext, для «моделирования и анализа сельскохозяйственной деятельности» (однако проект, похоже, больше не действует).
  • JetBrains MPS. JetBrains MPS — это интегрированная среда разработки (IDE) для создания DSL. Он называет себя проекционным редактором, который хранит документ в качестве базовой абстрактной древовидной структуры. (Эта концепция также используется в таких программах, как Microsoft Word.) JetBrains MPS также поддерживает генерацию кода для Java, C, JavaScript или XML.

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

Хотите использовать DSL? Вот несколько советов:

  • DSL не являются GPL. Попробуйте решить ограниченный круг проблем в определенной области.
  • Вам не нужно определять собственный DSL. Это было бы утомительно. Найдите существующий DSL, отвечающий вашим потребностям, на таких сайтах, как DSLFIN, где перечислены DSL для финансового домена. Если вы не можете найти подходящий DSL, вы можете определить свой собственный.
  • Лучше делать DSL "как английский", чем слишком техничный.
  • Генерация кода из DSL не является обязательной, но дает значительные и продуктивные преимущества, когда это делается.
  • DSL называются языками, но, в отличие от GPL, они не обязательно должны быть исполняемыми. DSL не является исполняемым.
  • DSL можно писать с помощью текстовых процессоров. Однако использование редактора DSL упрощает проверку синтаксиса и семантики.

Если вы используете DSL сейчас или планируете делать это в будущем, поделитесь своим опытом в комментариях.

Исходный код OpenStack ( Python) в VIM

10 лучших подключаемых модулей Vim для программирования на нескольких языках

Сделайте свою жизнь программиста или системного администратора немного лучше с помощью этих 10 плагинов для Vim.

Зачем и как обработка исключений в Python Flask

Почему разработчики любят писать код ночью

Ночной график работы является ключом к творчеству и продуктивности для многих программистов с открытым исходным кодом.

Читайте также: