2010-06-01から1ヶ月間の記事一覧

HTML form management on Xslate

@typesterさんの指摘を受けて再考中。確かに、気軽にrawを書くようになると、結局「うっかりraw」をする可能性が生じて安全性が下がります。テンプレートではrawを使うべきではない、ということを前提にドキュメントと記事を書き直しました。 参考: @fujiwa…

Smarty compatible template engine on Xslate

Xlsateの基本機能が安定してきたので、Smarty互換のパーサを書き始めました。 http://github.com/gfx/p5-Text-Clevy "smart" -> "Smarty" からの連想で、"clever" -> "Clevy" という命名です。 Smartyは非常に機能が多く、パーサーだけでは対応できないため…

Perl 5.13.2 released!

Perlの開発版である5.13.2がリリースされた。 http://search.cpan.org/dist/perl-5.13.2/ 今回はかなり意欲的な変更を含んでいる。 文字列置換における/r修飾子の導入。s/foo/bar/r は元の文字列を変更せず、置換後の文字列を返す。これは特に、mapと共に使…

Template Toolkit sucks

Template Toolkitはどういうわけか*1Perlにおける標準のテンプレートエンジンの座にいるが、その仕様は美しいとは言い難い。特にまずいのは、 あるトークンの意味がコンテキストや実行状態によって異なることだ。 記号の意味がコンテキストによって異なる例…

Xslate with Direct Threaded Code

Ruby 1.9が採用しているVMの最適化手法に、Direct Threaded Codeというものがあるらしい。 YARV Maniacs #3 ターゲットコードが大きくなる代わりにVMの実行ループがかなり速くなるようだ。これを、Xslateに採用しない手はない、ということで簡単に実装してみ…

Smartyを調べている

XslateがSmartyをサポートしたらいいのに、という要望があったので、Smartyを調べている。Smartyは極力「プログラミング」をできないようにしているようで、確かに使いやすそうだ。 調べてみるとcycle関数が面白そうなのでとりあえずXslateに似た機能を実装…

Test::LeakTrace has been improved at 0.11

Test::LeakTraceは、主にXSコードのメモリリークを追うために書いたライブラリだが、誤検出(false positive)が多く使いにくかった。今回RTチケットを受け取ったのを機に、検出アルゴリズムを再考したので、誤検出はほぼなくなったはずだ*1。 新しいアルゴリ…

How to collect exportable functions

モジュールがエクスポートする関数を集めたい、と思うことがある*1。 すべてのモジュールがExporterを使っているなら、 @EXPORT_OK を見るだけでいいのだが、実際にはそうはいかない。しかたがないので、一旦他のパッケージにエクスポートし、その後コードリ…

Xslate vs. JSON::XS

(追記あり) Xslate 0.1033ではsort/mapにブロックを渡せるようになった。 <: $a.sort( -> $a, $b { $a.title cmp $b.title } ).join(", ") :> <: $a.map( -> $x { $x + 1 } ).join(", ") :>ところで[twitter:@xaicron] さんによれば、JavaScriptが使える端末向けの場合は、テンプレート</:></:>…

How and when Xslate escapes html special characters

Xslate のエスケープポリシーについて考えたので、ここでまとめておく*1。 Xslate のエスケープ処理について、覚えることは以下の三つである 'none' のもとでは挙動が異なるが、これはメールなどの非HTMLテキストを出力するために用意されているモードであり…

Xslate supports binding

Xslateが束縛(binding)をサポートし、値に名前をつけることができるようになった。ただしそれらは定数扱いであり、代入はできない。 <: # constantはベアワードを要求 constant LANG = "Xslate"; # myは変数名を要求 my $lang = "Perl"; -:> Hello, <: LANG :> world! Hello, <: $lang :> world!myで宣言した定数も、定数なので代入を禁止している。その代わり、コンパイル時に決定でき</:></:></:>…