metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-05-15 04:33 pm

Ад спортивных программистов?

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

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

[identity profile] blacklion.livejournal.com 2013-05-15 07:33 pm (UTC)(link)
Не нужна ни в каком конкретном проекте универсальная расшряемость, вот в чём дело-то!

[identity profile] justy-tylor.livejournal.com 2013-05-15 08:14 pm (UTC)(link)
Тем не менее, для простой задачи "специалист предметной области хочет посмотреть выборку по датасету" оказываются нужны и операции над множествами, и функции высших порядков.

Основная проблема с требованиями к расширяемости в том, что они сами имеют тенденцию расширяться. Была в прошлом одна история. Дизайнеры запросили возможность скриптовать игровые сценарии как последовательность перемещений и отдельных анимаций - "техник должен пройти оттуда сюда и нажать на кнопку, больше нам ничего не понадобится, точно-точно". Ребята сделали. Затем запрашивались всё новые и новые фичи, вводились паттерны реакций на события (услышал игрока, увидел игрока, сработал таймер, ...), дошло до полускриптованных битв роботов с киборгами. Когда меня перевели на руководство тем отделом, то DSL представлял собой ужасное нечто с ручными уникальными метками состояний на каждой строке. Удалось его несколько облагородить для оставшихся до конца проекта сценариев, оставив совместимость со старыми. Наиболее разумным решением было бы прямое применение Lua, благо он и так использовался в том проекте. Однако, в момент поступления задачи "техник нажимает на кнопку" некому было предугадать последствия.

[identity profile] blacklion.livejournal.com 2013-05-15 08:20 pm (UTC)(link)
Например, в приводимом вами примере было бы круто иметь язык НА ОСНОВЕ Lua (почему нет?) но с прямым описанием конечных автоматов в синтаксисе, нет?

[identity profile] justy-tylor.livejournal.com 2013-05-15 09:00 pm (UTC)(link)
Был свой препроцессор для Lua, и "подсахаренные" описания состояний использовались при разработке несценарных моделей поведения игровых персонажей. :)

[identity profile] blacklion.livejournal.com 2013-05-15 08:25 pm (UTC)(link)
И, кстати, добавить eDSL без кровываых ошмётков ради удовлетворения не нами придуманного синтаксиса обычно удаётся в Хаскеле. И я вполне знаю человека, который на этом колбасит коммерческий куод именно в таком стиле — eDSL под задачу, а дальше это выглядит как срипт на оченьт специальном но СРАЗУ ПОНЯТГНОМ языке. Нужен конечный автомат? Вот пролог, а вот конечный автомат скопированный из описанния протокола как етсь (И ставшщий КОДОМ, который проверяется на типы, компилируется, оптимизируется и всё это забесплатно практически). Нужен парсер? Вот пролог, а вот грамматика в EBNF, прямо как в стандарте на формат, копипастом из документации в код скопированная. И так далее.

[identity profile] justy-tylor.livejournal.com 2013-05-15 09:14 pm (UTC)(link)
Хаскель в синтаксическом плане хорош. Но для продвинутых программистов. Я бы не доверил специалисту-предметнику на нём писать (а потом бегать с логами ошибок компиляции).

[identity profile] thesz.livejournal.com 2013-05-16 11:07 am (UTC)(link)
Ошибки там типические.

То есть, "если вот такое сообщение, то ты вот тут сделал не так". Достаточно завести словарик таких ошибок.
ext_646638: (Default)

[identity profile] rdia.livejournal.com 2013-05-20 03:19 pm (UTC)(link)
Чисто в целях просвещения меня - а сразу добавить этот словарик в компилятор нельзя?

[identity profile] thesz.livejournal.com 2013-05-20 03:43 pm (UTC)(link)
Нет.

Это же специфично для каждого конкретного встроенного языка.
ext_646638: (Default)

[identity profile] rdia.livejournal.com 2013-05-20 04:54 pm (UTC)(link)
А-аа! Спасибо!