沿革
protobuf が作成された理由と、時間の経過とともにそれを変化させた決定を理解することで、ツールの機能をより有効に活用できるようになります。
なぜプロトコルバッファをリリースしたのですか?
プロトコルバッファをリリースした理由はいくつかあります。
プロトコルバッファは、Google 内の多くのプロジェクトで使用されています。 Google App Engine のコードを詳しく調べると、その一部が見つかるかもしれません。実際、この技術の一部はすでに公開されていました。Google App Engine のコードを詳しく調べると、その一部が見つかるかもしれません。
私たちは、XML だけでなく、プロトコルバッファも受け入れるパブリック API を提供したいと考えました。XML をプロトコルバッファに変換しているため、より効率的であると同時に、いずれにせよ XML をプロトコルバッファに変換しているからです。
Google 以外の人がプロトコルバッファを便利だと思うかもしれないと考えました。 プロトコルバッファをリリースしても問題ない形にすることは、楽しいサイドプロジェクトでした。
最初のリリースバージョンがバージョン 2 なのはなぜですか? バージョン 1 はどうなったのですか?
プロトコルバッファの最初のバージョン(「Proto1」)は、2001 年初頭に開発が開始され、長年にわたって進化し、誰かがそれを必要とし、作成する意思があるたびに新機能が追加されました。 そのような方法で作成されたものは何でもそうであるように、それは少し混乱していました。 コードをそのままリリースすることは現実的ではないという結論に達しました。
バージョン 2(「Proto2」)は完全な書き換えでしたが、設計のほとんどを維持し、Proto1 からの実装アイデアの多くを使用しました。 一部の機能が追加され、一部が削除されました。 しかし、最も重要なことは、コードがクリーンアップされ、まだオープンソース化されていない Google ライブラリへの依存関係がなくなったことです。
なぜ「プロトコルバッファ」という名前なのですか?
名前の由来は、フォーマットの初期の頃に遡ります。プロトコルバッファコンパイラがクラスを生成する前です。 当時、実際には個々のメソッドのバッファとして機能する ProtocolBuffer
というクラスがありました。 ユーザーは、AddValue(tag, value)
のようなメソッドを呼び出すことで、タグ/値のペアをこのバッファに個別に追加していました。 生のバイトはバッファに格納され、メッセージが構築されると書き出すことができました。
それ以来、名前の「バッファ」の部分は意味を失いましたが、それはまだ私たちが使用している名前です。 今日、人々は通常、「プロトコルメッセージ」という用語を抽象的な意味でのメッセージを指すために、「プロトコルバッファ」をメッセージのシリアル化されたコピーを指すために、「プロトコルメッセージオブジェクト」を解析されたメッセージを表すメモリ内オブジェクトを指すために使用します。
Google はプロトコルバッファに関する特許を持っていますか?
Google は現在、プロトコルバッファに関する発行済み特許を保有しておらず、プロトコルバッファと特許に関する懸念事項があれば、喜んで対応いたします。
プロトコルバッファは ASN.1、COM、CORBA、Thrift とどのように異なりますか?
私たちは、これらのシステムにはすべて長所と短所があると考えています。 Google は社内でプロトコルバッファに依存しており、それらは私たちの成功に不可欠な要素ですが、それはそれらがすべての問題に対する理想的なソリューションであるという意味ではありません。 独自のプロジェクトのコンテキストで各代替案を評価する必要があります。
ただし、これらのテクノロジーの多くは、交換形式と RPC(リモートプロシージャコール)プロトコルの両方を定義していることに注意する必要があります。 プロトコルバッファは単なる交換形式です。 それらは RPC に簡単に使用でき、実際、RPC サービスを定義するための限定的なサポートがありますが、特定の RPC 実装またはプロトコルに縛られていません。