protobuf

Платформенно-независимый механизм сериализации структурированных данных, разработанный Google. Он позволяет определять структуры данных в специальных файлах .proto и затем генерировать исходный код для работы с этими структурами на различных языках программирования. Protobuf обеспечивает компактное представление данных, высокую производительность и обратную совместимость, что делает его идеальным выбором для систем хранения и обмена данными, таких как RPC-протоколы и конфигурационные файлы.

Особенности

  • компактное бинарное представление данных с эффективной сериализацией и десериализацией;
  • автоматическая генерация кода из определений .proto с помощью компилятора protoc;
  • обеспечение обратной совместимости за счёт механизма полевых тегов (field numbers) и правил эволюции схем;
  • поддержка расширенных типов данных: вложенные сообщения, перечисления, одномерные и многомерные массивы, словари, объединения;
  • интеграция с gRPC для генерации сервисов и клиентов RPC.

Основные компоненты

Библиотека Protobuf включает в себя язык описания схем, компилятор и набор библиотек времени выполнения для различных языков (подробнее с документацией можно ознакомиться здесь).

Язык описания протокола

Схемы данных описываются в файлах с расширением .proto на специальном языке. В них определяются структуры, поля с типами и тегами, а также сервисы для RPC.

Основные конструкции языка:

  • message — определение структуры данных с набором полей;
  • enum — определение перечисления;
  • oneof — объединение, в котором может быть установлено только одно поле из набора;
  • map<key_type, value_type> — ассоциативный массив;
  • repeated — поле, которое может повторяться (массив);
  • service и rpc — определение RPC-сервисов для gRPC;
  • Пакеты (package) и импорты (import) для организации кода и повторного использования.

Компилятор protoc

Компилятор protoc обрабатывает .proto файлы и генерирует код для целевого языка программирования. Он поддерживает плагины для расширения функциональности, например, для генерации gRPC-кода или специализированных сериализаторов.

Основные возможности protoc:

  • Генерация классов для работы с сообщениями на выбранном языке;
  • Поддержка параметров командной строки для настройки вывода (пути, префиксы, опции оптимизации);
  • Интеграция с системами сборки (CMake, Bazel, Make) через плагины или прямые вызовы;
  • Расширяемость через пользовательские плагины, написанные на любом языке, поддерживающем protobuf.

C++ API

Библиотека времени выполнения для C++ предоставляет классы и функции для работы с сообщениями, их сериализации, десериализации и рефлексии. Код, сгенерированный protoc, наследуется от базового класса google::protobuf::Message.

Основные классы и функции C++ API:

  • google::protobuf::Message — базовый класс для всех сообщений, предоставляющий методы SerializeToString(), ParseFromString(), SerializeToArray(), ParseFromArray(), DebugString() и др.;
  • GetDescriptor() и GetReflection() — доступ к мета-информации о сообщении (поля, их типы, теги) для динамической работы;
  • RepeatedPtrField и RepeatedField — контейнеры для полей repeated;
  • Map — реализация ассоциативных массивов для полей map;
  • EnumValueDescriptor — информация о значениях перечислений;
  • TextFormat — парсинг и вывод в человеко-читаемый текстовый формат;
  • util::JsonOptions и связанные функции для работы с JSON-представлением.

Расширения и опции

Protobuf предоставляет механизм опций для настройки генерации кода и поведения сериализации. Опции могут быть как стандартными, так и пользовательскими.

Основные возможности расширения:

  • Стандартные опции: packed (для упаковки repeated полей), deprecated, ctype, weak и др.;
  • Пользовательские опции — определяются в .proto файлах и могут быть использованы плагинами;
  • Any — тип, позволяющий хранить произвольное сообщение с его типом;
  • Duration и Timestamp — специальные типы для работы с временными промежутками и моментами.

Производительность и оптимизация

Protobuf спроектирован для высокой производительности. Библиотека использует эффективные алгоритмы сериализации и минимизирует накладные расходы.

Аспекты производительности:

  • Отсутствие необходимости разбирать всю структуру для доступа к полям — сериализованные данные остаются в компактном виде;
  • Возможность использования упаковки (packed) для repeated полей;
  • Наличие оптимизированных реализаций на C++ (арена-аллокаторы, избегание лишних копирований);

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "protobuf/5.27.0@aurora",
    )    

Процесс локальной сборки описан в документации.

protobuf

Protocol Buffers - Google's data interchange format
Лицензия
BSD-3-Clause
Версия
Домашняя страница
Скачать
armv7
2.93 Mb
MD5: a8374b9b0f9235efa72acfac07b56172
Updated: 12.02.2026, 13:34:28
x86_64
3.25 Mb
MD5: 13ed01597bf91b0735202b835c1021b1
Updated: 12.02.2026, 13:42:59
armv8
3.24 Mb
MD5: 1e698102e4ec4786b5a080135277b60e
Updated: 12.02.2026, 13:29:55
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.