概略
Protocol Buffersとは?
Googleが2008年に公開したシリアライザ。Interface Definition Language (IDL)でデータ構造を記述しておくことで、複数のプログラミング言語に対応したシリアライザを自動生成してくれる。ちなみに、これに対抗したソフト(Message Pack)が国内でも開発されている。
ライセンス
BSD。すばらしい。
性能
バイナリエンコーディングされるためXMLより速い。どこかの比較ページで見た感じだとデシリアライズ性能が優秀。
IDL
文法の概略
C/C++のstructっぽい書き方。タグ(後述)によって属性のデータ数を指定することができる。当然ネストも可能。
詳細は ここ を参照。
詳細は ここ を参照。
フィールドルール
属性には必ずルールを指定しておく必要がある。タグには次の三種類がある。
- required
要素数が必ず1となる属性。
- optional
要素数が0または1となる属性。
- repeated
要素数が0以上になる属性。
つまりrepeatedがC/C++の配列のような機能を提供してくれる。
また、repeatedするのが組み込みのデータ型ならば[packed=true] をつけることで高速となる模様。
ところでrequiredは本当に必要なものだけにつけるのがマナー?のよう。
また、repeatedするのが組み込みのデータ型ならば[packed=true] をつけることで高速となる模様。
ところでrequiredは本当に必要なものだけにつけるのがマナー?のよう。
タグ番号
各属性にはユニークなタグ番号を指定する必要がある。被るとコンパイル時に怒られる。
データ
詳しくは本家サイトを見るとよいが、符合付き/符合無しの整数、浮動小数、2値、文字列、バイト列など基本的なデータ型を指定できる。
継承?
extendを使うことで定義したデータを拡張したデータを作ることができる。