Re: H2 и DSL. Плиз, подскажите...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.03.12 18:12
Оценка:
Здравствуйте, PSV100, Вы писали:

PSV>Вот меня и интересует, возможен ли второй вариант для реализации моего языка, где всё декларативно и гармонично из коробки?

PSV>И вообще, я правильно оцениваю картину будущих событий?

Откровенно говоря рассказ несколько сумбурный, так что не уверен, что все понял правильно.

В ближайшие дни я выложу более подробное описание Н2 с небольшими примерами из которых будет многое ясно.

То что ты описываешь называется — внешний ДСЛ. Н1 на это не заточен, хотя и позволяет сделать с помощью PegGrammar. При этом не будет поддержки IDE, но все остальное сделать можно и не так уж и сложно.

Н2 будет равно удобен как для создания внутренних ДСЛ, так и для создания внешних. При этом почти в автомате будет получаться поддержка в IDE и другие плюшки.

Теперь ответы на вопросы...

Скорости Н2 будет достаточно для создания "взрослых" языков. Их парсить неимоверно сложнее нежели ДСЛ-и. Так что для ДСЛ-ей скорости будет хватать с запасом. Можно будет легко редактировать ДСЛ в интерактивном режиме и в реалтайме получать интелисенс, подсветку и другие плюшки IDE.

Что касается интерпретации на лету... Н2 всегда будет генерировать АСТ (точнее дерево разбора ДР). Даже если речь идет об интерпретаторе, то имеет смысл делать его в два прохода. На первом проходе будет обрабатываться весь файл ДСЛ-я и генерироваться некий байткод или набор классов (с телами методов реализующих логику). На втором полученный код запускается и генерирует отчеты (или делает что-то другое). Это даст и максимальную скорость выполнения, и удобство работы с кодом на ДСЛ-е, и простоту его реализации.

Что касается методов реализации, то в любом случае Н2 предоставит все нужные средства. Ну, а решения может быть два.

Первое решение на базе макросов. При этом можно описать свой синтаксис который будет переписан в код на новой версии немерла (не знаю будет ли сохранено имя) реализованной на баз Н2.

Второе решение Н2 используется именно как языковый фрэмворк и генерирует не код на Немерле, а непосредственно низкоуровневый код под конкретную платформу.

Разница будет заключаться в усилиях которые надо затратить на генерацию кода. В первом случае вы фаткически переписываете свой ДСЛ в аналогичную программу на Немерле которая при запуске будет генерировать отчет. Во втором случае можно будет генерировать свой ДСЛ или код под целевую платформу. Он сложнее, но гибче.

В любом случае можно будет использовать имеющиеся синтаксические модули. Например, для представления того же SQL (или LINQ).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.