歷史

Protocol Buffers 建立背後的簡短歷史。

瞭解 protobuf 建立的原因以及隨著時間推移改變它的決策,可以幫助您更好地使用該工具的功能。

您為何發布 Protocol Buffers?

我們發布 Protocol Buffers 有幾個原因。

Protocol buffers 被 Google 內部的許多專案使用。我們還有其他專案想要以開放原始碼形式發布,這些專案使用了 protocol buffers,因此為了做到這一點,我們需要先發布 protocol buffers。事實上,這項技術的某些部分已經以開放形式出現;如果您深入研究 Google AppEngine 的程式碼,您可能會發現其中一些。

我們想要提供公開 API,接受 protocol buffers 以及 XML,這既是因為它更有效率,也是因為無論如何我們都會在後端將 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 實作或通訊協定綁定。