Re[3]: инструментарий для разработки DSL
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.10.13 11:45
Оценка: 1 (1) +1 :)
Здравствуйте, VladD2, Вы писали:

VD> Сдается мне в плане DSL-изации Scala до Nemerla пока что не доросла. А мы тут еще Nitra пилим. Вот это будет действительно Ultimate DSL Tool


Я как-то не отследил. С тех пор, как вы в JetBrains оказались, хоть что-нибудь ваша команда зарелизила, довела до готовности? Или немерле — идеальный язык для затягивания разработки?
Re: инструментарий для разработки DSL
От: jazzer Россия Skype: enerjazzer
Дата: 21.10.13 05:54
Оценка: 20 (1)
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


Если нужен С++, то Boost.Proto — на нем (как минимум) построен Boost.Spirit, Boost.Phoenix, Boost.Xpressive...
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: инструментарий для разработки DSL
От: Danila_a Россия http://ib-soft.ru
Дата: 29.10.13 12:41
Оценка: 6 (1)
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


Немного ковырял сей продукт, но в академических целях.
В принципе, технология, как наследник stratego развивается давно и документация есть, но в виде spoofax — с документацией похуже. Некоторые вещи приходиться выискивать в статьях, диссертациях, связанных с проектом (например, box-формализм для pretty-printing.
Вот тут переделка Entity language для генерации моделей и админ-классов для джанги
https://bitbucket.org/ib_soft/entity-model

Тут интерпретатор и элементы суперкомпилятора для игрушечного языка Simple Lazy Language:
https://bitbucket.org/ib_soft/stratego-sll

Сам подход к обработке AST мне понравился. И генерирование pretty-printers по грамматике тоже хорошо)
Вот еще есть Scala-библиотека, использующая такой же подход:
http://code.google.com/p/kiama/
Вроде развивается.
Re: инструментарий для разработки DSL
От: _Claus_  
Дата: 18.10.13 14:00
Оценка: +1
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


только на Scala http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html
инструментарий для разработки DSL
От: Anton V. Kolotaev  
Дата: 16.10.13 20:44
Оценка:
Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.
Re: инструментарий для разработки DSL
От: Аноним  
Дата: 17.10.13 06:26
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


ocaml?!
Re: инструментарий для разработки DSL
От: LaptevVV Россия  
Дата: 17.10.13 06:59
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.

http://www.jetbrains.com/mps/
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.10.13 19:01
Оценка:
Здравствуйте, _Claus_, Вы писали:

AVK>>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


_C_>только на Scala http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html



Чёй-то "только"? Сдается мне в плане DSL-изации Scala до Nemerla пока что не доросла. А мы тут еще Nitra пилим. Вот это будет действительно Ultimate DSL Tool
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.10.13 19:05
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи?


Какие задачи? Какая среда в которой должен работать DSL?

AVK>Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


Да, прикольно. Похоже на Xtext, но с более прямыми ногами и лучшей родословной.

Мы над аналогом для дотнета работаем. Nitra называется. Мы еще на более ранней стадии, но зато более серьезно прорабатываем детали (я надесь). Парсер можно будет поглядеть уже в следующем месяце.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.10.13 19:11
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


Кстати, говорят, что для встроенных ДСЛ-ей подходит Котлин и Скала. Первый развивает интересные штуки из Скалы, но при этом не переусложнен как Скала.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: инструментарий для разработки DSL
От: Anton V. Kolotaev  
Дата: 19.10.13 20:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Какие задачи? Какая среда в которой должен работать DSL?


Спасибо всем откликнувшимся.

DSL нужен для компактного описания торговых стратегий для симулятора микроструктуры рынка. Модели, как это принято сейчас делать, составляются из модулей. Они могут быть простыми -- содержат некую элементарную функциональность и реализуются на целевом языке (С++, питон и т.д.) -- или составными. Составные модули — это отображение некоторого набора входных параметров на некоторую композицию модулей. Соответственно в основном DSL будет нужен для описания составных модулей (наброски списка модулей)

Например,
Ups(x, dt = 10, alpha = 0.15) ::= EWMA(max(0, x - Lagged(x, dt)), alpha)
Downs(x, dt = 10, alpha = 0.15) ::= EWMA(max(0, Lagged(x, dt) - x), alpha)
RSI(x, dt = 10, alpha = 0.15) ::= 100 - 100 / (1 + Ups(x,dt,alpha)/Downs(x,dt,alpha))

MACD(x, slow = 26, fast = 12) ::= EWMA(x, 2./(fast+1)) - EWMA(x, 2./(slow+1))
MACD_signal(x, slow = 26, fast = 12, timeframe = 9) ::= EWMA(MACD(x, slow, fast), 2/(timeframe+1))
MACD_histogram(x, slow = 26, fast = 12, timeframe = 9) ::= MACD(x,slow,fast) - MACD_signal(x,slow, fast, timeframe)


Соответственно, хочется получить AST соответствующее таким определениям и по ним генерировать код на целевых языках.

Конкретный синтаксис непринципиален при условии, что он будет достаточно приятным на вид.

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

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

Если рассматривать выбор полноценный или встроенный DSL, то на первых порах хотелось бы по максимуму обойтись средствами, встроенными в какой-нибудь язык. Я до последнего времени обходился питоном, но его динамическая типизация, странности в объектной модели и неприспособленность к задачам трансформации древовидных структур данных заставляют меня искать что-то другое.

Я посмотрел на упомянутый ранее Spoofax, и с первого взгляда создается впечатление, что он как раз и создан для подобных задач: удобное описание парсеров, система переписывания термов, pretty printer, довольно обещающая интегрируемость сгенерированного языка в эклипс. Останавливает только опасение, что будет сложно описать какие-нибудь нетривиальные трансформации деревьев и это будет адски тормозить (а его прототип Stratego начинал тормозить уже на довольно простых примерах)

Jetbrains MPS выглядит интересно, но все-таки хотелось бы иметь ясное преобразование текст в текст и во вторых не совсем понятно его удобство для описания сложных трансформаций.

F# и Немерл отпадают из-за их заточенности под винду. Похоже, остается выбирать между окамлом и скалой.
Re[3]: инструментарий для разработки DSL
От: _Claus_  
Дата: 21.10.13 08:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _Claus_, Вы писали:


AVK>>>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


_C_>>только на Scala http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html



VD>Чёй-то "только"? Сдается мне в плане DSL-изации Scala до Nemerla пока что не доросла. А мы тут еще Nitra пилим. Вот это будет действительно Ultimate DSL Tool


Уже доросла. другими путями только. Nitra поглядим конечно. Но красивой жизни хочется уже сейчас. А по совокупности показателей (кроме DSL нужно и хорошие IDE, и либы с фреймворками для кодинга) Scala лучшее. + в 2.11 по метапрограммингу паритет будет (для меня как прикладного программиста).
Re[4]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.13 12:56
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я как-то не отследил. С тех пор, как вы в JetBrains оказались, хоть что-нибудь ваша команда зарелизила, довела до готовности?


В следующем месяце начнется EAP. Можешь поглядеть сам.

DM>Или немерле — идеальный язык для затягивания разработки?


Ага. Немерл плохой язык для решения сложных задач которые никто не шал до этого, если не считать все остальные языки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.13 13:40
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>...реализуются на целевом языке (С++, питон и т.д.) ...


С этого надо начинать. Это сразу накладывает довольно серьезные ограничения на инструменты.

AVK>Например,

AVK>
AVK>Ups(x, dt = 10, alpha = 0.15) ::= EWMA(max(0, x - Lagged(x, dt)), alpha)
AVK>


Вообще-то это и на Питоне можно было поянуть. Синтаксис довольно простой.

AVK>Кодогенерация, судя по всему, будет довольно-таки мудреной, поэтому язык реализации DSL должен быть достаточно мощным и выразительным для задач трансляции.


Тут нужно что-то вроде квази-цитирования немерла. Причем для С++ и Питона. А этого в типизированном виде нет нигде. Так что остается упавать только на текстовую генерацию на базе хорошего шаблонного движка.

В Spoofax он есть, но меня он не очень впечатлил. StringTemplate, созданный автором ANTLR более выразителен и гибок (на первый взгляд).

AVK>DSL должен работать на основных платформах: вин, мак и линуксы. Будет очень здорово, если удастся сынтегрировать получившийся язык с какой-нибудь ide.


А зачем DSL работать на этих платформах? Его должны писать пользователи? Если код на ДСЛ пишут программисты, то пользователю можно отдавать скомпилированный вариант.

AVK>Если рассматривать выбор полноценный или встроенный DSL, то на первых порах хотелось бы по максимуму обойтись средствами, встроенными в какой-нибудь язык. Я до последнего времени обходился питоном, но его динамическая типизация, странности в объектной модели и неприспособленность к задачам трансформации древовидных структур данных заставляют меня искать что-то другое.


Ну, при некотором умении приспособить можно что угодно к чему угодно. Питон довольно гибок чтобы его приспособить к трасформации кода. Собственно задача у тебя довольно понятная:
1. Распознаем ДСЛ и преобразовываем его в некое подобие АСТ (это может быть и иерархия питоновских объектов созданная путем прогона встроенного ДСЛ-я (реинтрепретация кода).
2. Трасформация АСТ в модель. Тут рулит ФП. mup-ов и прочей фигни в Питоне выше крыши.
3. Генерация кода на С++ и Питоне по модели. Тут нужен приличный шаблонизатор вроде StringTemplate-а. Главное чтобы были сплайсы и возможность автоматически управлять отступами.

И того можно это сделать и на Питоне. Вторым кандидатом я бы назвал ANTLR 4 + StringTemplate (последний входит в поставку первого). Проблема только в том, что придется тащить за собой явовский рантайм. Ну, и начальное конфигурирование у ANTLR довольно утомительное.

С поддержкой IDE при этом все не очень хорошо.

Если брать из "готовый" (в ковычках, так как все эти решения довольно сыроваты) решений, то упомянутый тобой Spoofax — довольно неплохое решение. Трансформация там на уровне. Генерация текста есть, но я бы оценил бы ее на четверочку, если не на троечку. Зато есть движок биндинга символов. Правда очень молодой (просто обязан глючить).

Еще есть более зрелый, но менее красиво реализованный, Xtext. Там нет такого красивого движка трансформации, нет декларативного биндинга, и кодогенерация довольно неуклюжая (нужно везде писать много явского кода). Но он сделан на более-менее проверенно генераторе парсеров ANTLR и есть вероятность, что можно будет прекрутить к этому делу StringTemplate. А это то что нужно (если не считать его динамической типизированности).

AVK>Я посмотрел на упомянутый ранее Spoofax, и с первого взгляда создается впечатление, что он как раз и создан для подобных задач: удобное описание парсеров, система переписывания термов, pretty printer, довольно обещающая интегрируемость сгенерированного языка в эклипс. Останавливает только опасение, что будет сложно описать какие-нибудь нетривиальные трансформации деревьев и это будет адски тормозить (а его прототип Stratego начинал тормозить уже на довольно простых примерах)


Ну, Стратего штука как раз для трасформации. Для твой задачи это больше чем нужно, даже.

А вот что касается скорости, то тут сложно что либо сказать. Используемые ими технологии парсинка (SGLR) это звиздец. Тормоз редкосный. Там квадрат, в общем случае, вылезает. Мы его сразу выбросили из рассмотрения. Однако на простых грамматиках (строго LL(1)) он должен работать приемлемо. По крайней мере втыкать не должен. Описанный тобой пример прекрасно разбирается LL(1)-граматикой. Так что может быть все будет более-менее приемлемо.

AVK>Jetbrains MPS выглядит интересно, но все-таки хотелось бы иметь ясное преобразование текст в текст и во вторых не совсем понятно его удобство для описания сложных трансформаций.


С генерацией текста там даже по хуже чем в Spoofax и уж точно хуже чем в StringTemplate. Зато там есть отлаженный движоек биндинга символов и типизации. Другими словами, если качественная IDE — в приоритете и можно поустпиться текстовым форматом, то MPS лучшее решение. Но его еще осваивать нужно. Там довольно много нужно по изучать. Я с наскоку не осилил. Пришлос смотреть примеры и читать доки. Вот что там точно хуже (на мой взгляд), так это отсутствие человекочитаемого текстового формата. Код хранится в ХМЛ, а читать его можно только в IDE. Но в IDE он выглядит как обычный код.

AVK>F# и Немерл отпадают из-за их заточенности под винду. Похоже, остается выбирать между окамлом и скалой.


Вот это для тебя точно не решение. Точнее худшее решение. Траху много, толку мало. ОКамл обладает только примитивный препроцессором и ФП. Это где угодно есть. У Скалы нет даже препроцессора. Она просто не заточена на генерацию С++ и Питона.

Я бы, на твоем месте, выбирал бы из:
1. Организации фреймворка на Питне.
2. Использование Spoofax.
3. Использование Xtext с доработкой напильником (прикручивание StringTemplate).
4. Использование ANTLR 4 и StringTemplate.
5. Использование MPS.

Это все если у тебя DSL реально должен разбираться на клиентских (пользовательских) машинах. Если скрипты статичны, то код можно сгенерировать на чем угодно, а поставлять уже готовые решения. Обычно этого хватает за глаза.

Так что опиши что за задачу решают скрипты?

Кстати, что такое "EWMA"? И в чем суть этого код? Это описание зависимостей?

ЗЫ

Есть такая книжка DOMAIN SPECIFIC LANGUAGES (Martin Fowler) / ПРЕДМЕТНО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ (Мартин Фаулер). На русском Вильфмс издавал. Перевод поганеньнький, но терпимый. Очень полезно для формирования правильного подхода. Возможно прочтя ее ты и на питоне все сбацаешь .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.13 13:48
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Уже доросла.


Это как? Синтаксис там пока менять боятся / не могут. Без этого полноценный ДСЛ не сделать. На реинтерпретации синтаксиса далеко не уедешь.

_C_>другими путями только. Nitra поглядим конечно. Но красивой жизни хочется уже сейчас.


Ну, расширяемый парсер будет, что называется, на днях. В следующем месяце начинаем EAP. Далее по планам квази-цитирование и связывание символов.

_C_>А по совокупности показателей (кроме DSL нужно и хорошие IDE, и либы с фреймворками для кодинга) Scala лучшее. + в 2.11 по метапрограммингу паритет будет (для меня как прикладного программиста).


Я не знаю кому лучше. Судя по описанию автора темы ему Скала не нужна. Она вообще его проблемы не решает. Что до паритета, то мечтат не вредно. Немерл последние 10 лет шлифуется и конца и края этому процессу не видно. А чтобы устранить все проблемы и снять все ограничения, нужно все с нуля проектировать. Мы именно этим и занимаемся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: инструментарий для разработки DSL
От: _Claus_  
Дата: 21.10.13 16:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _Claus_, Вы писали:


_C_>>Уже доросла.


VD>Это как? Синтаксис там пока менять боятся / не могут. Без этого полноценный ДСЛ не сделать. На реинтерпретации синтаксиса далеко не уедешь.


Синтаксис там гибкий. позволяет усе. вот напр. навскидку Scala без скобок https://github.com/lihaoyi/Scalite . остальное тем более.


_C_>>А по совокупности показателей (кроме DSL нужно и хорошие IDE, и либы с фреймворками для кодинга) Scala лучшее. + в 2.11 по метапрограммингу паритет будет (для меня как прикладного программиста).


VD>Я не знаю кому лучше. Судя по описанию автора темы ему Скала не нужна. Она вообще его проблемы не решает. Что до паритета, то мечтат не вредно. Немерл последние 10 лет шлифуется и конца и края этому процессу не видно. А чтобы устранить все проблемы и снять все ограничения, нужно все с нуля проектировать. Мы именно этим и занимаемся.


да мне квазицитирования и того что есть хватит. намного важнее для жизни ейный стандарт либ. вот где песня, которую вам послушать.. когда такое имеешь, потребность в костылях и вставных зубах резко падает.
Re[4]: инструментарий для разработки DSL
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 21.10.13 17:32
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>F# и Немерл отпадают из-за их заточенности под винду. Похоже, остается выбирать между окамлом и скалой.


VD>Вот это для тебя точно не решение. Точнее худшее решение. Траху много, толку мало. ОКамл обладает только примитивный препроцессором и ФП. Это где угодно есть.


Можешь развернуть про окамл, что именно имеешь в виду под его препроцессором? Если camlp4, то он позволяет довольно сильно весь синтаксис языка переделать (см. revised syntax), не говоря о простом его расширении.
Re[5]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.13 18:26
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Можешь развернуть про окамл, что именно имеешь в виду под его препроцессором? Если camlp4, то он позволяет довольно сильно весь синтаксис языка переделать (см. revised syntax), не говоря о простом его расширении.


У человека нет задачи пределывать синтаксис ОКамла. У него задача создать ДСЛ который будет генерировать на выходе С++- и Питон-код. И тут ОКамл ну никак не поможет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: инструментарий для разработки DSL
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 21.10.13 18:32
Оценка:
Здравствуйте, VladD2, Вы писали:

DM>>Можешь развернуть про окамл, что именно имеешь в виду под его препроцессором? Если camlp4, то он позволяет довольно сильно весь синтаксис языка переделать (см. revised syntax), не говоря о простом его расширении.


VD>У человека нет задачи пределывать синтаксис ОКамла. У него задача создать ДСЛ который будет генерировать на выходе С++- и Питон-код. И тут ОКамл ну никак не поможет.


Тогда о чем была речь про препроцессор?
Всяких генераторов парсеров для него ничуть не меньше, чем для других хороших языков, и больше, чем для немерле какого-нибудь. А поможет удобством оперирования AST.
Re[7]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.13 21:50
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Тогда о чем была речь про препроцессор?


О том что он бесполезен.

DM>Всяких генераторов парсеров для него ничуть не меньше, чем для других хороших языков, и больше, чем для немерле какого-нибудь. А поможет удобством оперирования AST.


Всяких генераторов парсеров хватает для любого языка. АНТЛР будет в сто раз гибче, мощнее и удобнее LL(1)-препроцессора для языка которого нет в системе. И у него (АНТЛР-а) есть бэкэнды для С++ и Питона.

В общем, надо соразмерять что советуешь. Мне вот тоже Немерл нравится, но я его советовать при таких условиях не буду.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: инструментарий для разработки DSL
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 23.10.13 02:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Всяких генераторов парсеров хватает для любого языка. АНТЛР будет в сто раз гибче, мощнее и удобнее LL(1)-препроцессора для языка которого нет в системе. И у него (АНТЛР-а) есть бэкэнды для С++ и Питона.


Я не понимаю, почему ты сравниваешь ANTLR с каким-то препроцессором, когда его надо сравнивать с многочисленными аналогами на окамле, намного более мощными, чем LL(1).

VD>В общем, надо соразмерять что советуешь. Мне вот тоже Немерл нравится, но я его советовать при таких условиях не буду.


Разумно. Собственно, окамл не я советовал, я лишь твои ремарки уточнить хотел.
Re[9]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.13 11:55
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я не понимаю, почему ты сравниваешь ANTLR с каким-то препроцессором, когда его надо сравнивать с многочисленными аналогами на окамле, намного более мощными, чем LL(1).


DM>Разумно. Собственно, окамл не я советовал, я лишь твои ремарки уточнить хотел.


Ремарки и были в ответ на идею использовать ОКамл. Он конечно тоже подойдет в принципе, но не больше чем Питон, который и так есть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: инструментарий для разработки DSL
От: Аноним  
Дата: 24.10.13 10:03
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи? Беглое ознакомление с предметом вывело на реинкарнацию Stratego: Spoofax, но есть большие сомнения в зрелости технологии. Спасибо.


Racket

Nanopass (chez scheme)
Re[3]: инструментарий для разработки DSL
От: Аноним  
Дата: 24.10.13 10:37
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>F# и Немерл отпадают из-за их заточенности под винду. Похоже, остается выбирать между окамлом и скалой.


F# прекрасно себя чувствует под Mono.
Re[3]: инструментарий для разработки DSL
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.13 11:21
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Например,

AVK>
AVK>Ups(x, dt = 10, alpha = 0.15) ::= EWMA(max(0, x - Lagged(x, dt)), alpha)
AVK>Downs(x, dt = 10, alpha = 0.15) ::= EWMA(max(0, Lagged(x, dt) - x), alpha)
AVK>RSI(x, dt = 10, alpha = 0.15) ::= 100 - 100 / (1 + Ups(x,dt,alpha)/Downs(x,dt,alpha))

AVK>MACD(x, slow = 26, fast = 12) ::= EWMA(x, 2./(fast+1)) - EWMA(x, 2./(slow+1))
AVK>MACD_signal(x, slow = 26, fast = 12, timeframe = 9) ::= EWMA(MACD(x, slow, fast), 2/(timeframe+1))
AVK>MACD_histogram(x, slow = 26, fast = 12, timeframe = 9) ::= MACD(x,slow,fast) - MACD_signal(x,slow, fast, timeframe)
AVK>


AVK>Соответственно, хочется получить AST соответствующее таким определениям и по ним генерировать код на целевых языках.


У тебя простейший язык, мало чем сложнее арифметических операций.
Я бы предложил не заморачиваться с мега-инструментами, а взять нечто вроде парсер комбинаторов на джаваскрипте навроде https://npmjs.org/package/packrattle
Вообще таких либ пол-гитхаба и я свою никак не выложу туда

Когда станет ясно, какой именно будет конечный язык, вот тогда можно будет легко перейти на более мощный инструмент.
Re[4]: инструментарий для разработки DSL
От: Anton V. Kolotaev  
Дата: 29.10.13 13:54
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Например,

AVK>>
AVK>>Ups(x, dt = 10, alpha = 0.15) ::= EWMA(max(0, x - Lagged(x, dt)), alpha)
AVK>>


VD>Вообще-то это и на Питоне можно было поянуть. Синтаксис довольно простой.


Синтаксис-то простой, а вот кодогенерация будет сложной, а в питоне даже паттерн-матчинга нет.

AVK>>DSL должен работать на основных платформах: вин, мак и линуксы. Будет очень здорово, если удастся сынтегрировать получившийся язык с какой-нибудь ide.


VD>А зачем DSL работать на этих платформах? Его должны писать пользователи? Если код на ДСЛ пишут программисты, то пользователю можно отдавать скомпилированный вариант.


Имеется в виду, что транслятор из DSL в целевой язык должен работать на всех этих платформах.

AVK>>Если рассматривать выбор полноценный или встроенный DSL, то на первых порах хотелось бы по максимуму обойтись средствами, встроенными в какой-нибудь язык. Я до последнего времени обходился питоном, но его динамическая типизация, странности в объектной модели и неприспособленность к задачам трансформации древовидных структур данных заставляют меня искать что-то другое.


VD>Ну, при некотором умении приспособить можно что угодно к чему угодно. Питон довольно гибок чтобы его приспособить к трасформации кода. Собственно задача у тебя довольно понятная:

VD>1. Распознаем ДСЛ и преобразовываем его в некое подобие АСТ (это может быть и иерархия питоновских объектов созданная путем прогона встроенного ДСЛ-я (реинтрепретация кода).
VD>2. Трасформация АСТ в модель. Тут рулит ФП. mup-ов и прочей фигни в Питоне выше крыши.

Вот возможностей питона здесь как раз и не хватает.

AVK>>F# и Немерл отпадают из-за их заточенности под винду. Похоже, остается выбирать между окамлом и скалой.


VD>Вот это для тебя точно не решение. Точнее худшее решение. Траху много, толку мало. ОКамл обладает только примитивный препроцессором и ФП. Это где угодно есть. У Скалы нет даже препроцессора. Она просто не заточена на генерацию С++ и Питона.


Я сейчас начал разработку на скале -- вроде бы вполне удобно. В принципе, когда в языке есть интерполяция строк, то шаблонный движок отпадает за ненадобностью.
Зачем нужен препроцессор, если я делаю внешний DSL?

VD>Так что опиши что за задачу решают скрипты?


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

VD>Кстати, что такое "EWMA"? И в чем суть этого код? Это описание зависимостей?


EWMA — скользящее среднее. Это по большому счету описание завимостей между блоками в симуляторе. Вот здесь я пытался объяснить, как устроена архитектура симулятора.
Re[4]: инструментарий для разработки DSL
От: Anton V. Kolotaev  
Дата: 29.10.13 13:57
Оценка:
Здравствуйте, Аноним, Вы писали:

AVK>>F# и Немерл отпадают из-за их заточенности под винду. Похоже, остается выбирать между окамлом и скалой.


А>F# прекрасно себя чувствует под Mono.


Общим мнением является то, что моно -- очень сырая платформа и там часто что-нибудь ломается. Вот немерл, например, на моно вроде бы уже не поддерживается. Разве не так?
Re[5]: инструментарий для разработки DSL
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.10.13 14:15
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Синтаксис-то простой, а вот кодогенерация будет сложной, а в питоне даже паттерн-матчинга нет.


Даже? :) Я качественный ПМ для произвольного языка вообще нигде не видел. Обычно или для одного языка, или странный и кривой.

Для генерации кода можно использовать хороший шаблонный движок вроде Стрингтемплейта. А разбор вручную или МП-средствами Питона.

AVK>Я сейчас начал разработку на скале -- вроде бы вполне удобно. В принципе, когда в языке есть интерполяция строк, то шаблонный движок отпадает за ненадобностью.


Тебе виднее, но на мойз взгляд проще было бы взять готовый шаблонный движок. С теми же отступами не пришлось бы бороться.

AVK>Зачем нужен препроцессор, если я делаю внешний DSL?


Потенциально, можно просто поменять синтаксис как тебе нужно и пользоваться компилятором.

AVK>Идея в том, чтобы предоставить удобный инструмент для тех, кто исследует микроструктуру рынка: типа что будет если изменить величину тика на рынке или поддержать непосредственно на бирже еще один тип ордеров.


А ты уверен, что торгаши справятся с написанием программ? И почему тогда просто не позволить писать их на том же Питоне?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: инструментарий для разработки DSL
От: Аноним  
Дата: 31.10.13 22:58
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:
А>>F# прекрасно себя чувствует под Mono.

AVK>Общим мнением является то,


Не надо выдавать мнение пионеров из села Гадюкино за "общее". Mono — стабильная платформа, применяется в ентерпрайзе во все щели.

AVK> что моно -- очень сырая платформа и там часто что-нибудь ломается.


Пример хотя бы один можно привести, чтоб совместимость поломали?

AVK> Вот немерл, например, на моно вроде бы уже не поддерживается. Разве не так?


Ну и флаг им в кривые руки, да барабан на шею.
Re: инструментарий для разработки DSL
От: megapoliss Украина  
Дата: 05.12.13 11:01
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Господа, на чем сейчас модно разрабатывать ДСЛи?


В ответах не нашел упоминания про groovy, поэтому добавлю его
http://groovy.codehaus.org/Writing+Domain-Specific+Languages
dsl groovy
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.