Diary?

2009-04-08
Wed

(23:35)

論文自体はまだ全然読めてないけど、 Terence Parr の主張はつまり「JSP にしろ別のものにしろ、チューリング完全なパワフル過ぎるテンプレート/プレゼンテーションエンジンは過ぎたるは及ばざるが如しなので Suck」という事で OK? だったらその点に関しては全面的に賛成。プレゼンテーション部分でリッチな事が出来すぎると、それは時々大変な惨事を引き起こすわけでして。

※ところで論文のリンク先は http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf が正しいはず。 "papers" が "paers" になってるから typo かな。

そういえば四年前に開発を放棄してるんだけど、俺もテンプレートエンジンを作ったことがあったんだ。確か Python を始めて三週間ぐらいのときにでっち上げたテンプレートエンジンで、実はこの日記とかゲーム系コンテンツとかの生成に今でも使ってる奴なんだけど、ぶっちゃけそいつは酷い代物だった。まあ四年前の俺は今よりもずっと未熟というかアホだったんだなあという事なんだけど、とりあえずどんな代物か晒してみるか。これはこの日記の最新3日分ページのテンプレートの一部だ。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html
  PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>{var title}::{var year}-{var month}-{var day}</title>
    (def prev:
      <link rel="prev" href="{var prev}" />
    )
    (def next:
     <link rel="next" href="{var next}" />
    )
    <link rel="stylesheet" href="/log/style.css"/>
  </head>
  <body>
    <div class="section">
      <h1>{var title}</h1>
      (each item:
        <div class="section">
          <h2><a href="./{var item.year}/{var item.month}/{var item.day}">
          {var item.year}-{var item.month}-{var item.day}<br/>{var item.dow}</a></h2>
          {rvar item.body}
        </div>
      )
    </div>
  </body>
</html>

ちょっとテンプレートの構成要素を抜き出すと、

{var variable}
variable を出力する。 HTML 特殊文字はすべてエスケープ。
{rvar variable}
variable を出力する。 HTML 特殊文字のエスケープを行わない。
(each list: body)
list の要素数分だけ body を出力。
(def variable: body)
variable が未定義あるいは偽として扱われない値であれば body を出力

こんな感じ。実に素朴というか改めてみるとその低機能っぷりに驚く。こいつを処理するコードは今でも入手可能だけど、ぶっちゃけバグが残ってるんで使わない方がいい。コードのクオリティも酷いしね。まあ、そもそも機能性が低すぎる上に手抜きまみれなんで他の人が使うに耐える代物じゃないんだけど。

ちなみに開発がストップした理由だけど、どうもこの日記の更新スクリプトを一通り作り終わったあたりで「あ、もういいや」ってなったらしい。最初は別テンプレートのインクルードとか付けるつもりだったんだけど、別になくても支障のないものしか作らなかったというか何というか。あと HTML 特殊文字のエスケープの切り替えをテンプレート側でやってるのが今にして思えばクソだ。これは文字列型の他に HTML 文字列型を定義して、型によって処理をオーバーロードするのが多分正しい。そこら辺の判断はデータモデルの責務であって、テンプレートのものではない。

しかし昔の俺はずいぶんと正規表現が好きだったんだなあ……。いや、今でも使うときは使うけどさ。

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。