История
Краткая история создания 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.