Здравствуйте, PSV100, Вы писали:
PSV>Вот меня и интересует, возможен ли второй вариант для реализации моего языка, где всё декларативно и гармонично из коробки? PSV>И вообще, я правильно оцениваю картину будущих событий?
Откровенно говоря рассказ несколько сумбурный, так что не уверен, что все понял правильно.
В ближайшие дни я выложу более подробное описание Н2 с небольшими примерами из которых будет многое ясно.
То что ты описываешь называется — внешний ДСЛ. Н1 на это не заточен, хотя и позволяет сделать с помощью PegGrammar. При этом не будет поддержки IDE, но все остальное сделать можно и не так уж и сложно.
Н2 будет равно удобен как для создания внутренних ДСЛ, так и для создания внешних. При этом почти в автомате будет получаться поддержка в IDE и другие плюшки.
Теперь ответы на вопросы...
Скорости Н2 будет достаточно для создания "взрослых" языков. Их парсить неимоверно сложнее нежели ДСЛ-и. Так что для ДСЛ-ей скорости будет хватать с запасом. Можно будет легко редактировать ДСЛ в интерактивном режиме и в реалтайме получать интелисенс, подсветку и другие плюшки IDE.
Что касается интерпретации на лету... Н2 всегда будет генерировать АСТ (точнее дерево разбора ДР). Даже если речь идет об интерпретаторе, то имеет смысл делать его в два прохода. На первом проходе будет обрабатываться весь файл ДСЛ-я и генерироваться некий байткод или набор классов (с телами методов реализующих логику). На втором полученный код запускается и генерирует отчеты (или делает что-то другое). Это даст и максимальную скорость выполнения, и удобство работы с кодом на ДСЛ-е, и простоту его реализации.
Что касается методов реализации, то в любом случае Н2 предоставит все нужные средства. Ну, а решения может быть два.
Первое решение на базе макросов. При этом можно описать свой синтаксис который будет переписан в код на новой версии немерла (не знаю будет ли сохранено имя) реализованной на баз Н2.
Второе решение Н2 используется именно как языковый фрэмворк и генерирует не код на Немерле, а непосредственно низкоуровневый код под конкретную платформу.
Разница будет заключаться в усилиях которые надо затратить на генерацию кода. В первом случае вы фаткически переписываете свой ДСЛ в аналогичную программу на Немерле которая при запуске будет генерировать отчет. Во втором случае можно будет генерировать свой ДСЛ или код под целевую платформу. Он сложнее, но гибче.
В любом случае можно будет использовать имеющиеся синтаксические модули. Например, для представления того же SQL (или LINQ).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.