テンプレートエンジンの自動エスケープ機能について

最近Xslateの自動エスケープ機能について考えていたのですが、これは「この機能によって安全性が高まる」というものではなく(結果的にそうでないものより安全ではありますが)、むしろテンプレートエンジンとしてはこれこそ正しい振る舞いなのではないかと思うに至りました。
この「値を渡すと、ソースコードに埋め込む際に適当に加工する」という振る舞いは、SQLプレースホルダの振る舞いがまさにそうです。SQLに値を埋め込む際、アプリケーションでいちいち値をエスケープするというのは危険であり、避けるべきです。可能であれば常にプレースホルダを使うという方針をとるだけで、エスケープ問題について余計なことを考える必要はなくなります。
テンプレートエンジンについても同じこと。テンプレートに値を埋め込む時は、そのまま渡せばいいのです。これを手動で行わせるのは、プレースホルダに埋め込む値のエスケープの有無をユーザーに行わせるようなもの。そんなRDBMSがあったとしたら使いものにならないでしょう。HTML用のテンプレートエンジンで自動エスケープ機能がないということは、プレースホルダに埋め込む値を手動でエスケープしなければならないRDBMSのように使いにくいものなのではないでしょうか。
テンプレートエンジンが特殊なのは、別のHTMLソースコードを埋め込む必要性がしばしばあるという点ですが、これも「そのまま埋めこむ」よう指示するRAWマーカーによって自然な形で解決しました。いまや、この振る舞いこそ正しいといえます。
この考えに基づいて、Xslate 0.2000からはescapeオプションを廃止します。その変わり、typeオプションを導入し、生成するもののcontent typeに合わせて「html」「xml」「text」のいずれかを指定できるようにします。「text」は旧来の「escape => "none"」に相当しますが、これはメールなどのテキストを生成するためのものであり、HTML/XMLの生成で「text」を指定するべきではありません。