歷史
了解為什麼創建 protobuf 以及隨著時間的推移改變它的決策,可以幫助您更好地使用該工具的功能。
為什麼要發佈 Protocol Buffers?
我們發佈 Protocol Buffers 有幾個原因。
Protocol buffers 被 Google 內部許多專案使用。我們有其他想要以開源方式發佈的專案使用了 protocol buffers,所以為了做到這一點,我們需要先發佈 protocol buffers。事實上,該技術的一些部分已經以某種形式進入開源領域;如果您深入研究 Google AppEngine 的程式碼,您可能會發現它的一些蹤跡。
我們想要提供接受 protocol buffers 以及 XML 的公共 API,這不僅效率更高,而且因為我們無論如何都會在我們的後端將 XML 轉換為 protocol buffers。
我們認為 Google 以外的人可能會發現 protocol buffers 很有用。將 protocol buffers 整理成我們樂意發佈的形式是一個有趣的副專案。
為什麼第一個發佈的版本是 2?版本 1 發生了什麼事?
protocol buffers 的初始版本(「Proto1」)從 2001 年初開始開發,並在多年時間裡不斷發展,每當有人需要並願意完成工作來創建它們時,就會產生新的功能。就像以這種方式創建的任何東西一樣,它有點混亂。我們得出的結論是,以現有的程式碼發佈是不切實際的。
版本 2(「Proto2」)是完全重寫的,儘管它保留了大部分設計並使用了 Proto1 的許多實作概念。新增了一些功能,刪除了一些功能。但最重要的是,程式碼被清理乾淨,並且沒有任何對尚未開源的 Google 程式庫的依賴性。
為什麼命名為「Protocol Buffers」?
這個名稱起源於該格式的早期,當時我們還沒有 protocol buffer 編譯器為我們產生類別。當時,有一個名為 ProtocolBuffer
的類別,它實際上充當單獨方法的緩衝區。使用者會透過呼叫像 AddValue(tag, value)
這樣的方法將標籤/值對個別新增到這個緩衝區中。原始位元組會儲存在緩衝區中,然後在建構訊息後寫出。
從那時起,名稱中的「buffers」部分失去了它的意義,但它仍然是我們使用的名稱。今天,人們通常使用「protocol message」一詞來抽象地指稱一個訊息,「protocol buffer」指稱訊息的序列化副本,以及「protocol message object」指稱代表已解析訊息的記憶體內物件。
Google 對 Protocol Buffers 有任何專利嗎?
Google 目前沒有發佈任何關於 protocol buffers 的專利,我們很樂意解決人們可能對 protocol buffers 和專利的任何疑慮。
Protocol Buffers 與 ASN.1、COM、CORBA 和 Thrift 有何不同?
我們認為所有這些系統都有其優點和缺點。Google 在內部依賴 protocol buffers,它們是我們成功的關鍵組成部分,但這並不表示它們是每個問題的理想解決方案。您應該在自己專案的背景下評估每個替代方案。
不過,值得注意的是,這些技術中的幾種同時定義了交換格式和 RPC(遠端程序呼叫)協定。Protocol buffers 只是一種交換格式。它們可以很容易地用於 RPC — 而且,事實上,它們確實對定義 RPC 服務有有限的支援 — 但它們不依附於任何一個 RPC 實作或協定。