serialization
自作ライブラリ
boost::serializationみたく読み書きの定義のコードをある程度共通化出来てベタに書くよりかは結構少ない記述量で実装が完了出来て、あとデフォルト値も指定できるようなライブラリを作った。
欠点は、
- 種々のコンテナに標準で対応していない。
- pointer, shared_ptrに自動的には対応出来ない。
- XML以外のYAMLやJASONには対応していない。
- 用意しなければいけないコード量がまだまだ多い。
という事でboost::serializationの実装を調べてみよう。
formal boost-review of Marcin Kalicinski Property Tree Library begins
http://lists.boost.org/Archives/boost/2006/04/103315.php
なんだか自分が欲しいものに似てる予感。
http://boost-consulting.com/vault/index.php?action=downloadfile&filename=property_tree_rev5.zip&directory=&PHPSESSID=ebae0e82fc1c26d66e3c5c531dd0cc92&PHPSESSID=ebae0e82fc1c26d66e3c5c531dd0cc92
と思って見てみたところ、コンテナに対する読み書きのコードは自分が用意しないといけないような感じ。これだと柔軟性はあるけど面倒くさそうだなぁ。
C++でのやり方
型の情報をTreeで階層化して保存する場合、C++の場合だとboost::anyとかをElementが持つ値の型にすれば一応何でも保持できるのかな?でもそれを結局文字列と相互変換しなくてはいけないから、
serialize, deserializeする際のschemaの情報をコードにしなくても済むやり方はあるか?
またどのくらいシンプルなコードで記述出来るか?
テキストから実際の型へのdeserializationは、場合によっては遅延評価した方が良いのかもしれない。
JavaとかC#みたく既定がObjectで、reflectionとかがあると大分やり易いんだろうな。
C++の場合、静的な解決によって実現できる柔軟性は結構なものがあると思うけれど、それだけだとビルド後の成長曲線が単純なものになってしまいそう。もっと柔軟にするには動的に判断する機構を作りこんでいく必要があるけれど、そうなると単純さは失われてしまうかも。あとただ単に柔軟なだけでは方向性が定まらずバネが無いかもしれない。
C++なんだから、プログラミング言語やデータベースやOSや画像処理エンジンみたいなコンパクトでしかもスループットを稼ぐ必要のあるものを作るべきだな。柔軟なのはLLに任せた。(逃げ