Perl と YAML

そもそも,YAML::Syck 自体の将来性が微妙なんですが,

の内容を軽くまとめると,

  • YAML.pm (by Ingy) は古い。バグがありサブセットである。
  • YAML::Syck (by Audrey) は速いが,バグがありかなりサブセットである。
  • Python には PyYAML(-3000) があり,とてもよい
  • Ruby に PyYAML が移植された,とてもよい
  • Ingy らが PyYAML を Perl に移植中(PlYaml
  • クラッチから書かれた C ライブラリの LibYAML というものも開発中

となってます。

ちらりとサイトを覗いてみた感じだと,PlYaml はまだ発展途上でした。

LibYAML は early stage of development とのことで,サイト上は version 0.1 なんですが,Subversion repository はもうちょっとそこより進んでます。実際ビルドしてみましたが,簡単な parse / emit は可能でした(どこまで複雑なものを受け入れるのかは試していない)。ただ,アンカーのある文書を emit する際に頭のインデントが除去されることがあるような気が(LibYAML 自身でそれを parse できるので YAML 文法上問題ないのかなぁ)。

parser の API は libsyck と違って ALIAS を検出してくれますし*1ブロックスタイルであるかネストスタイルであるかパーサが知ることができるので好印象ですね。

YAML::Syck の将来性が微妙とか書いてしまいましたが,PlYaml や LibYAML の Perl バインドが実用クオリティになるのはもうちょっと時間がかかりそうです。

2007/05/11 追記

Ingy たんが YAML2 というのをあげてます。将来的に YAML.pm のリプレースを目指す物としてのプレースホルダとしてですが。こいつは上記で書いた LibYAML のバインディングも用意されてます。きちんと動くものかどうかはまだわかりませんが。

*1:libyaml の場合,後方参照であれば勝手にアンカー元ノードをひっぱってくるのでパーサ側でトラップしづらい