понедельник, 9 апреля 2012 г.

[prog.flame] Тут нехилый срач на тему DSL может развернуться…

на RSDN в форуме “Философия программирования”. Почти как в старые добрые времена. Запасаюсь попкорном.

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

“Я планирую это исправить”
“Ибо у меня на руках куча фактов”
“Ты несешь очевидный, для любого кто делал ДСЛ, бред”
“Это правильный вопрос. И на него довольно трудно сходу ответить. Но у меня есть мысли.”

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


Вообще, для такого рода идей лакмусовой бумажкой для меня является простой прием: я пытаюсь натянуть идею на задачу, которой в данный момент занимаюсь на работе. Последнюю неделю я занимался тем, что придумывал и реализовывал передачу информации из оперативной БД программы в историческую БД. Оперативная – это БД, которую активным образом использует компонент для своей работы. Историческая – это БД, по которой затем будет строится разнообразная статистика и отчеты.

Места для DSL я здесь не вижу. Проблема была в том, чтобы найти приемлимый алгоритм переноса. Когда он было найден, то без особых усилий был воплощен в C++ном коде. Делать какой-то помежуточный этап в виде языка с каким-то синтаксисом, его отображение в C++ный код и интеграция сгенерированного кода в существующий проект… Это все явно лишние телодвижения, ценность которых весьма сомнительна.

С другой стороны, время от времени возникают задачи, для решения которых DSL изначально напрашивается как самый лучший инструмент. Основная отличительная черта этих задач – это необходимость лаконичного описания желаемого результата в терминах предметной области. А уже из этого описания либо строятся килотонны примитивнейшего кода, либо его подхватывает какой-то интерпретатор, который руководствуется этим описанием в своей работе. Только вот задачи такие встречаются совсем не часто, по крайней мере у меня. В основном же с успехом используются языки общего назначения и уже давным-давно устоявшиеся DSL-и в виде того же SQL или регулярных выражений.

2 комментария:

Rustam комментирует...

Про DSL тут http://rsdn.ru/forum/philosophy/4696779.1.aspx Gaperton хорошо сказал. Ну и хорошо показал узость ниши нового немерле.

eao197 комментирует...

Самый ценный комментарий там пока был от netch80 -- очень толково и даже фундаментально: http://rsdn.ru/forum/philosophy/4695759.1.aspx

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

Взять тот же Makefile. Он ведь нужен не для того, чтобы заменить высококвалифицированного разработчика на языке высокого уровня. А для того, чтобы дать этому разработчику удобный инструмент _заточенный_ под конкретную задачу. Такая "заточка" зачастую переводит задачу из категории "невероятно тяжело решаемых" в "решаемую" и отличает DSL от универсальных языков.

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

Так что, если заменить "квалификацию" на более общее понятие "снижение издержек", то я с Gaperton-ом соглашусь.