Это разумный вопрос, и я думаю, что есть проблемы с определениями, такие как «что такое DSL»? Когда модное слово становится «горячим», оно становится маркетинговой возможностью и отрывается от основополагающей науки, если таковая имеется.
Несколько лет назад я написал книгу (Building Better Applications, ISBN 0-442-01740-5, давно вышедшую из печати), в которой я пытался взглянуть на производительность не только программ, но и программистов. Я пытался взглянуть на это, используя теорию информации.
Я придумал грубую меру ремонтопригодности, где проблема существует в виде структуры знаний в чьей-то голове (нет проблем для искусственного интеллекта), и ее решение существует в виде текстовой структуры, обрабатываемой машиной. Я смотрю на отношения между этими двумя структурами. Например, если в описании умственной проблемы произошли изменения, сколько изменений в исходном коде потребуется, чтобы правильно перенести это в текст программы? Простой способ измерить это состоит в том, чтобы сравнить код до и после. Теперь среднее значение, измеряемое в пространстве вероятных изменений, и чем ниже среднее, тем более понятен исходный код.
Мой тезис состоял в том, что чем больше поддерживаемого кода, тем больше он напоминает ментальную модель домена, поэтому разумно назвать его более «проблемно-ориентированным» или более «предметно-ориентированным» ,
Одна из особенностей такого кода, который я заметил, заключается в том, что он скорее является оператором проблемы, нежели решением проблемы. Решение заключается не в языке, а в реализации языка, его подструктуры.
Это эхо, хотя и не прямое согласие, с понятием «декларативный» или «императивный» язык.
Так что, пытаясь ответить на ваш вопрос, я бы сказал, давайте уйдем от того, что люди могут хотеть означать «DSL», и вместо этого посмотрим на определение, которое, по крайней мере, умеренно однозначно.
В рамках разработки этой идеи я наткнулся на ряд методов, одним из которых является Дифференциальное выполнение , которое, по-видимому, обеспечивает хорошую ремонтопригодность для кодирования пользовательского интерфейса, а также примерно уменьшает размер исходного кода. на порядок. Моя теория состоит в том, что это успешный пример того, каким может быть DSL.
Я не утверждаю, что ремонтопригодность может быть достигнута, если сопровождающему не придется подниматься по кривой обучения. Я думаю, что реальная ремонтопригодность достигается за счет того, что программистам приходится учиться вещам, которые могут быть непростыми для понимания, но однажды понятыми имеют желаемое значение.