Подтвердить что ты не робот

Разница между Microsoft Bond и протоколами Google Protocol

Недавно (январь 2015 г.) Microsoft open-sourced Bond, их рамки для работы со схематизированными данными. Во многом это похоже на Google Буферы протокола.

Каковы самые большие различия между ними? Каковы плюсы и минусы, то есть в каких ситуациях я бы хотел использовать один, но не другой? Конечно, я не говорю о очевидных вещах, таких как согласованность с другими проектами или уже существующими API, а скорее о функциях обеих библиотек. Чтобы привести пример, у Bond есть bonded<T>, который, если я правильно помню, не имеет аналога в буферах протоколов.

4b9b3361

Ответ 1

В целом, Bond имеет лучшую систему типов и поддерживает несколько протоколов.

В частности, плюсы:

  • Бонд поддерживает дженерики
  • Бонд имеет разные типы для представления коллекций: vector<T>, map<T>, list<T>
  • Связь поддерживает безопасную для типов ленивую десериализацию (bonded<T>)
  • Bond поддерживает несколько форматов (быстрый двоичный, компактный двоичный, XML, JSON) + маршалинг и транскодирование

Минусы:

  • Бонд не поддерживает разные типы для фиксированной и переменной целочисленной кодировки. В Bond способ кодирования целых чисел определяется форматом вывода (быстрый или компактный), но в буферах протоколов существуют целочисленные типы, которые всегда имеют фиксированный размер: fixed32 и fixed64.
  • Связь не поддерживает типы объединения (oneof в буферах протокола)

Я провел несколько тестов, и оказалось, что размер простых сообщений в двоичных форматах Bond и ProtoBuf примерно одинаков. Я сравнил время сериализации и десериализации с использованием библиотеки Bond и С# ProtoBuf: в моем случае Bond работал немного лучше, вы можете найти мой исходный код на GitHub

Подводя итог, я думаю, что лучше использовать Bond, когда вы работаете с некоторыми сложными типами данных или когда вам необходимо представлять одни и те же данные в разных форматах: например, хранить как двоичные файлы, но предоставлять как JSON и т.д.