Как стать автором
Обновить

Комментарии 27

Хорошая статья, но местами слишком быстро, не хватает примеров. Те что есть попали в точку, но может их немного деталировать, чтобы читателю не приходилось долго соображать выстраивая связи. Например почему Регулярные выражения и XML являются внешними DSL.

Надеюсь увидеть в следущих статьях:
1. Один или Два конкретных примера,
2. Теорию или просто ваши соображения о том как же выявить части проекта, которые желательно вынести в DSL,
3. Теорию или ваши соображения о этапах разработки своих DSL,
4. Инструменты позволяющие работать со своими DSL.

Спасибо!
Спасибо.
Все это будет, я выношу на обсуждение по частям записку диплома магистра по ИТ. Тема как раз «Исследование информационных технологий для создания языков описания предметной области»
Впереди и примеры, и матмодель, и тулзы, и описание выбора их и т.д.
Я бы, на самом деле, предпочёл бы начать с конца. Т.е. для решения какой задачи вы решили применить DSL, как оцениваете результат данного применения (например: всё замечательно, буду везде сам применять и другим рекомендую или теория хорошая, но инструменты разработки ещё в процессе). Ну, и собственно список тулзов.

А после статьи с таким содержанием народ сам вам в комментариях напишет, про что ещё рассказать.
В нашей предметной области определён некий язык для описания устройств. На базе него мы сделали свой DSL, компилируемый. Сделали хорошо — разработка пошла куда быстрее. Учить там нечего — спецификация на пятидесяти страницах. По опыту, основная трудность с DSL возникает у людей, привыкших часто менять работу не вникая в предметную область. Многие уж лучше напишут кучу строк на языке общего назначения чем будут учить что-то, что не пригодится на следующей работе.
вот тут твердый плюс, не могу не согласиться, инертность — основная проблема зачастую, к сожалению
Тема интересная, но написано уж очень сухо.
да чел видимо просто решил своим курсовиком похвастаться. куча высосанных из пальца слов и ни одного по делу.
Аргументируйте.

З.Ы. В конце статьи (если вы ее читали) написано, что это вводная. А в заголовке фигурирует Часть 1
я имел дурость прочитать =_="
не надо никаких вводных, выводных, рецензий, объяснительных записок и прочей мурни. есть есть что сказать по делу — так и пиши, нормальным человеческим языком, а не разводи отвлечённые разглагольствования.
Читается как фрагмент из диплома. Уж очень информативно и компактно, этот пост можно было бы разбавить примерами и разбить на два-три отдельных поста. Тема очень сложная и глубокая, без примеров «на пальцах» сложно объяснить неподготовленному человеку все прелести DSL.

Ну и ещё мелкая придирка: я бы не стал DSL называть языком программирования.
>Ну и ещё мелкая придирка: я бы не стал DSL называть языком программирования.

Позвольте не согласиться. Так уж получилось что в нашей стране принято алгоритмом называть _последовательность_ действий, приводящих к получению правильного результатая, а программированием — запись алгоритма на одном из ЯП. Но такие определения плохо сочетаются и с MDD и с декларативным программированием. Очень хорошо эту проблему освещал в свое время Нариньяни: www.artint.ru/articles/narin/PARAD-R1.htm
Но DSL может быть вовсе не описывать процессы, а описывать, например, структуру данных и ничего больше. Никакой последовательностью действий это не является.
По идее, наиболее точным будет прямой перевод, т.е. «Предметно-ориентированный язык». А вот если добавить ещё programming (DSPL), тогда уже «Предметно-ориентированный язык программирования».
Это не последний пост, это только начало, но на будущее постараюсь чуть подразбавить академический стиль.

>Ну и ещё мелкая придирка: я бы не стал DSL называть языком программирования.
Предметно-ориентированный язык программирования (англ. domain-specific programming language, domain-specific language, DSL) — язык программирования, специально разработанный для решения определённого круга задач, в отличие от языков программирования общего назначения, таких, как Си, или языков моделирования общего назначения наподобие UML, Postscript, SQL и др. (русская вики)

In software development and domain engineering, a domain-specific language (DSL) is a programming language or specification language dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique. (английская вики)

Фаулер в DSL-WIP несколько раз приводит пример DSL, как языка, но языка вспомогательного (" You couldn't write a whole application in this language — all you can do is describe one small aspect of an application.")
or specification language
А вот скажите, пожалуйста, каким образом DSL решает проблемы, описанные вами в самом первом списке («проблемы традиционного подхода»)?
Видно, что текст писался, чтобы написать, а не чтобы его кто-то понимал.

«Онтология — представление любой области знаний или части реального мира, который используется для семантического анализа текстов.». Кто этот «который»? Реальный мир используется для семантического анализа текста? Больше там, вроде, нет слов мужского рода.

И так весь текст. Несогласованные предложения, использование в определениях терминов, которые также следует предварительно определить, и многое другое. Если пытаться разбираться, не разбираясь изначально — ничего не поймёшь.

Не получилось у вас полезной статьи, хотя тема действительно интересная.
«Не получилось у вас полезной статьи»
А что вы хотите от пояснительной записки диплома?

Вообще, автору на заметку: научная работа и статья на хабре — это два разных жанра.
Что-то подобное уже существует в виде связки «UML (архитекторы)» + «генерация кода (программисты)», здесь предлагается более «размазанный» вариант создания приложений. Если UML не всегда себя окупает за счет высокого порога вхождения, то за DSL и подавно не уверен.
>UML не всегда себя окупает за счет высокого порога вхождения
Пожалуйста, скажите что вы это так шутите!

УМЛ (как и ГОСТ блок-схемы) может читать неподготовленный человек. Факт.

ЗЫ а DSL он кагбе не для проектирования. А для того чтоб вместо кучи java/C++ кода писать на своем лаконичном и компактном мета-языке.
1. Читать и понимать — это разные вещи. UML — это немного больше, чем просто структурированный текст.
2. На вскидку могу вспомнить JDeveloper, в котором можно «вместо кучи java/C++ кода писать на своем лаконичном и компактном мета-языке», т.е. на UML :)

На UML писать не получится :) Идея о том что UML может что-то заменить ошибочна и провальна, как собственно и идея MDA (Model-Driven Architecture). Не работает это.
Я тоже не знаю и одной успешной реализации проекта, где в качестве основного средства разработки использовался UML. В частности:

1. Высокий порог вхождения в UML. Необходимо, чтобы все участники проектирования умели на нем говорить.
2. На маленьких проектах UML не выгоден.
3. На больших проектах UML теряет необходимую гибкость.

Думаю с DSL будет тоже самое.
UML — это проектирование
DSL — реализация.

Вы путаете мух с котлетами
Я уже приводил пример с JDeveloper. Там есть возможность из UML генерировать сразу Java-код (J2EE). Чем не реализация?
Затем и нужны различные абстракции типа DSL, чтобы стереть грань между проектированием и реализацией, точнее чтобы реализация была максимально автоматизирована.
Качество статьи, мягко говоря, невысокое. Много откровенно не относящегося к делу текста. Часть информации относящейся к делу является косметически-подправленной цитатой с википедии, при этом без ссылки на первоисточник (статья в википедии). Статья содержит множество деклараций без аргументации.

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

Публикации

Истории