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

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

Date: 2013-05-15 05:35 pm (UTC)
From: [identity profile] blacklion.livejournal.com
EDSL к встраиваемому языку общего назначения.
Если этот язык позволяет просто в себя впихнуть выразительный eDSL. Много таких?

Date: 2013-05-15 05:54 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Из распространённых - Lua, Python, Ruby, лиспы.

Date: 2013-05-15 06:00 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Лиспы? Только с ридер-макро (не путать с просто макрами лисповыми). Ох. Ну да, там что угодно можно делать.

В Lua, Python и Ruby будут болтаться ошмётки по сторонам по сути не нужные, и оставленные только что бы удовлетворить парсер языка, я уверен на 100%. Ну или язык будет встраиваться в строку типа eDSLEval("..."); :)

Date: 2013-05-15 06:43 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Про ошмётки всё верно. Эта цена платится за возможность в одной строке работать на уровне запросов ISO 15926, а в следующей работать с результатами в терминах множеств и алгоритмов хост-языка.

Можно разработать свой язык общего назначения, обладающий лучшей расширяемостью. Но это ад, длительные и рискованные исследования. Я тоже исследую. Но не ставлю в зависимость от этого проекты и команды.

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

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

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

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

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

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

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

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

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

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

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

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

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

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. 10th, 2025 07:54 pm
Powered by Dreamwidth Studios