metaclass: (Default)
[personal profile] metaclass
http://dev.by/blogs/main/kuda-uhodyat-chempiony-sportivnogo-programmirovaniya
"НТ ООО «ЛюксСофт». Инженер-программист. В последнее время занимаюсь разработкой предметно-ориентированного языка программирования для нашего продукта."

За разработку самодельных встроенных языков надо отправлять добывать уран, самодельными ломами и лопатами.

Date: 2013-05-15 07:59 pm (UTC)
From: [identity profile] sbj-ss.livejournal.com
Из личного опыта: есть пара примеров.
1. Году примерно в 2002 мой будущий непосредственный начальник обнаружил, что XSLT, мягко говоря, убог, а задач по трансформации XML хватало. Результат - собственный язык программирования, грубо говоря - функциональщина, допускающая побочные эффекты функций, завёрнутая в XML-разметку и работающая в пространстве фон Неймана. Благополучно живёт по сей день, перетащен из жабовской монструозной конструкции на чистый Си (порядка 15К строк), документирован. Оказалось удобно писать на этом веб-морды, включая всякие навороченные интерактивные отчёты. Хотя и громоздко (описание ФВП займёт пол-экрана), не особо быстро (к байт-коду XPath-выборки так просто не приделаешь), но свой класс задач благополучно решает. Впрочем, заказчику мы это как DSL не навязываем, отдаём документацию на БД, хочет туда стучаться другими средствами, минуя веб-морду - пожалуйста, проблем не составит. Скорее наоборот, делалось это всё как раз для внутреннего применения - т.е. была возможность на ходу менять поведение и допиливать синтаксис по мере необходимости, а перед глазами имелся весь код, который мог сломаться при этом допиливании. Ребе [livejournal.com profile] metaclass когда-то замечал, что "придумали свой Lisp" - местами да, но на изобретение велосипеда подвигла невозможность "положить рядом" XML-разметку и лисповский синтаксис. Имхо всё-таки пример удачной разработки - но разработки локальной.
2. Для себя надо было вшить в микроконтроллер набор достаточно рутинных действий, но действий этих было задофига. Понятно, что кодить на Си "в лоб" = потонуть к чертям в этом коде. Набросал формальный синтаксис описания того, что в конечном счёте требуется, написал транслятор на Перле в сишный код - и обнаружил, что в новый синтаксис так или иначе придётся добавлять вещи, "выходящие за рамки имя=значение". Поэтому всё это благополучно похоронено, и все последующие версии использовали для кодогенерации непосредственно программу на Perl с собственным модулем для специфических действий. Другими словами, DSL оказался нафиг не нужен.
Итого: в большинстве случаев DSL таки плохая идея. Придумать принципиально новый язык программирования достаточно трудно, а изобретать велосипед ни к чему. Вдобавок при массовом применении любую ошибку, допущенную по глупости и недосмотру, придётся заботливо поддерживать в следующих версиях, выстраивая системы костылей и подпорок. Библиотечных функций на готовых языках это всё-таки касается в меньшей мере.
Я не буду категорически утверждать, что DSL не нужны, но принятие решения о нужности должно быть хорошо продуманным решением с проведёнными исследованиями "что вообще может выйти". А вот говорить с бухты-барахты "а давайте тут свой язык напишем, чтобы юзеру удобнее было", не спросив ни программистов, ни самого юзера, - это уж точно прямая дорога на урановые рудники.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 11:14 pm
Powered by Dreamwidth Studios