我正在考虑仅使用普通的 C#/.NET 4 语法来实现模板引擎,并具有静态类型的优势。
然后在该模板语言之上,我们可以创建领域特定语言(比如 HTML4、XHTML、HTML5、RSS、Atom、Multipart Emails 等)。
.NET 4 中最好的 DSL 之一(如果不是唯一的话)是SharpDOM。它实现了特定于 HTML 的 DSL。
看看 SharpDOM,我对使用 .NET (4) 可以做的事情印象深刻。
所以我相信在 .NET 4 中实现自定义 DSL 有一些不太知名的方法。可能不如 Ruby,但仍然如此。
所以我的问题是:可用于实现自定义 DSL 的 C# (4) 特定语法特性是什么?
我现在能想到的例子:
// 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 等)。