Я думаю о реализации шаблонизатора с использованием только простого C # /. NET 4 синтаксиса с преимуществом статической типизации.
Затем на этом языке шаблонов мы могли бы создать доменные языки (скажем, HTML4, XHTML, HTML5, RSS, Atom, многокомпонентные электронные письма и т. Д.).
Один из лучших DSL в .NET 4 (если не только один) - SharpDOM . Он реализует специфичный для HTML DSL.
Глядя на SharpDOM, я действительно впечатлен тем, что вы можете сделать с помощью .NET (4).
Так что я считаю, что есть некоторые не очень известные способы реализации пользовательских DSL в .NET 4. Возможно, не так хорошо, как в Ruby, но все же.
Таким образом, мой вопрос: Каковы особенности синтаксиса C # (4), которые можно использовать для реализации пользовательских DSL?
Примеры, которые я могу вспомнить прямо сейчас:
// HTML - doesn't look tooo readable :)
div(clas: "head",
ul(clas: "menu", id: "main-menu", () => {
foreach(var item in allItems) {
li(item.Name)
}
}) // See how much noise it has with all the closing brackets?
)
// Plain text (Email or something) - probably too simple
Line("Dear {0}", user.Name);
Line("You have been kicked off from this site");
Для меня действительно сложно придумать синтаксис с минимальным количеством шума .
Обратите внимание, что я не говорю о другом языке (Boo, IronRuby и т. Д.), А также не говорю о различных шаблонизаторах (NHaml, Spark, StringTemplate и т. Д.).