Syck とは
Ruby 1.8 から標準で付いてきたYamlライブラリ。Cでできている。
当時は世界一使われていた模様。あと、当時のRubyは文字列が文字コード情報を持たなかったので、日本語文字などを扱う場合色々苦労することもあったようだ。
Psych とは
libyamlのRubyラッパー。tenderlove氏が中心となって作っているもよう。
経緯
Ruby 1.9.2 から添付されるようになった(libyaml が利用できる場合一緒にビルドしてくれる)
Ruby 1.9.3 からPsychが標準になった。
Ruby 2.0.0 から、 Syckの方が削除される 予定。
最大の違い
マルチバイト文字列の扱いが異なる。
$ ruby -rsyck -ryaml -e "puts YAML.dump [1, {hoge: 'foo', fuga: 'つらぽよ'}]"
---
- 1
- :hoge: foo
:fuga: "\xE3\x81\xA4\xE3\x82\x89\xE3\x81\xBD\xE3\x82\x88"
$ ruby -rpsych -ryaml -e "puts YAML.dump [1, {hoge: 'foo', fuga: 'つらぽよ'}]"
---
- 1
- :hoge: foo
:fuga: つらぽよ
なので、Syckで作ったYamlファイルをPsychで読み込むと激しく化ける。つまりRuby1.8時代に作ってしまったYamlファイルは、変換しないとRuby1.9.3以降は扱いに困ることになり、そしてRuby2.0からは標準では扱えなくなる場合がある(多分gemは提供される)。