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


Предметно-ориентированный язык (англ. domain-specific language, DSL — «язык, специфический для предметной области») — компьютерный язык, специализированный для конкретной области применения (в противоположность языку общего назначения, применимому к широкому спектру областей и не учитывающему особенности конкретных сфер знаний). Построение такого языка и/или его структура данных отражают специфику решаемых с его помощью задач[1]. Является ключевым понятием языково-ориентированного программирования.

Строго говоря, деление языков программирования на языки общего назначения и предметно-ориентированные весьма условно, особенно, если учесть, что формально любой протокол или формат файлов является языком. Существует масса языков общего назначения, применяемых в качестве предметно-ориентированных для определённых задач, и наоборот, предметно-ориентированных языков, применяемых в качестве языков общего назначения. Так, язык ML, породивший целое семейство языков общего назначения (включая Haskell), — изначально разрабатывался в качестве DSL для системы автоматического доказательства теорем LCF. Примером, показывающим условность классификации, служит язык БНФ (и компилятор с него Lex/Yacc): с одной стороны, это яркий пример метаязыка, с другой — он предназначен для одной конкретной задачи.

Простейшие предметно-ориентированные языки, используемые в одном конкретном приложении, часто называют «мини-языками»[2].

Мартин Уорд (англ. Martin Ward)[3] в работе «Language Oriented Programming»[4] (которая считается отправной точкой развития ЯОП), использовал термины «problem oriented» и «domain oriented», но в англоязычном научном сообществе прижился термин «domain-specific», причём именно «domain-specific language», а не «domain-specific programming language». В русскоязычной литературе по программированию встречаются варианты «доменно-специфичный», «проблемно-ориентированный», «предметно-ориентированный».

Фаулер[5] и Дмитриев[6] определяют понятие DSL как «урезанный язык программирования (в большинстве случаев неполный по Тьюрингу)».

Ведущие исследователи языково-ориентированного программирования (Мартин Уорд, Пол Хьюдак[en], Валид Таха и другие) приводят следующие примеры предметно-специфичных языков в качестве классических[4][7][8]: