3

静的型付けの利点を備え たプレーンな C#/.NET 4 構文のみを使用して、テンプレート エンジンを実装することを考えています。

次に、そのテンプレート言語の上に、ドメイン固有言語(HTML4、XHTML、HTML5、RSS、Atom、マルチパート メールなど) を作成できます。

.NET 4 で最高の DSL の 1 つ (1 つだけではないにしても) は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 など) について話しているわけでもないことに注意してください。

4

2 に答える 2

1

あなたはマーティンファウラーのDSLの本に精通していると思いますが、そうでない場合は必ず見てください。C#4.0に固有のものは含まれていませんが、使用できる内部DSLの一般的なパターンがいくつかあります。また、ジェネリック型と型推論がC#でどのように機能するかを見てください。LINQは、高度な言語機能を使用してDSLを実装する良い例かもしれません。LINQには、AST操作も含まれている必要があります。これも興味深いかもしれません。

于 2010-05-18T08:16:22.200 に答える