~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0448351BE8BF296FF450D848346A1D30__1715212800 ✰
Заголовок документа оригинал.:
✰ Protocol Buffers - Wikipedia ✰
Заголовок документа перевод.:
✰ Буферы протоколов — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Protocol_Buffers ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/04/30/0448351be8bf296ff450d848346a1d30.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/04/30/0448351be8bf296ff450d848346a1d30__translat.html ✰
Дата и время сохранения документа:
✰ 18.06.2024 09:31:38 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 9 May 2024, at 03:00 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Буферы протоколов — Википедия Jump to content

Буферы протоколов

Из Википедии, бесплатной энциклопедии
Буферы протоколов
Разработчики) Google
Начальная версия Начало 2001 г. (внутреннее) [1]
7 июля 2008 г. ( 07.07.2008 ) (публично)
Стабильная версия
27.0  Отредактируйте это в Викиданных/ 23 мая 2024 г .; 22 дня назад ( 23 мая 2024 г. ) [2]
Репозиторий
Написано в C++, C#, Java, Python, JavaScript, Ruby, Go, PHP, Dart
Операционная система Любой
Платформа Кросс-платформенный
Тип формат и библиотека сериализации, IDL компилятор
Лицензия БСД
Веб-сайт протобуф .dev Отредактируйте это в Викиданных

Protocol Buffers ( Protobuf ) — это формат данных с открытым исходным кодом, бесплатный кроссплатформенный используемый для сериализации структурированных данных. Это полезно при разработке программ, которые взаимодействуют друг с другом по сети или для хранения данных. Этот метод включает в себя язык описания интерфейса , который описывает структуру некоторых данных, и программу, которая генерирует исходный код на основе этого описания для создания или анализа потока байтов, представляющего структурированные данные.

Обзор [ править ]

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

Цели разработки протокольных буферов подчеркивали простоту и производительность. В частности, он был спроектирован так, чтобы быть меньше и быстрее, чем XML . [3]

Протокол Buffers широко используется в Google для хранения и обмена всеми видами структурированной информации. Этот метод служит основой для специальной системы удаленного вызова процедур (RPC), которая используется практически для всех межмашинных коммуникаций в Google. [4]

Протокол Buffers аналогичен протоколам Apache Thrift , Ion и Microsoft Bond, предлагая конкретный стек протоколов RPC для использования с определенными службами , называемыми gRPC . [5]

Схемы структур данных (называемые сообщениями ) и службы описаны в файле определения прототипа ( .proto) и скомпилирован с помощью protoc. Эта компиляция генерирует код, который может быть вызван отправителем или получателем этих структур данных. Например, example.pb.cc и example.pb.h генерируются из example.proto. Они определяют классы C++ для каждого сообщения и службы в example.proto.

Канонически сообщения сериализуются в двоичный формат , который компактен, совместим как с прямыми , так и с предыдущими версиями , но не имеет самоописания (то есть невозможно указать имена, значения или полные типы данных полей без внешней спецификации). ). Не существует определенного способа включения или ссылки на такую ​​внешнюю спецификацию ( схему ) в файле буферов протокола. Официально поддерживаемая реализация включает формат сериализации ASCII. [6] но этот формат, хотя и самоописывающийся, теряет свойства прямой и обратной совместимости и, таким образом, не является хорошим выбором для других приложений, кроме редактирования и отладки человеком. [7]

Хотя основной целью протокольных буферов является облегчение сетевого взаимодействия, их простота и скорость делают протокольные буферы альтернативой ориентированным на данные классам и структурам C++, особенно там, где в будущем может потребоваться взаимодействие с другими языками или системами.

Ограничения [ править ]

У Protobufs нет единой спецификации. [8] Этот формат лучше всего подходит для небольших фрагментов данных, размер которых не превышает нескольких мегабайт и которые можно сразу загрузить/отправить в память, и поэтому он не является потоковым форматом. [9] Библиотека не обеспечивает сжатие «из коробки». Этот формат также плохо поддерживается в необъектно-ориентированных языках (например, Фортране ). [10]

Пример [ править ]

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

// 
 синтаксис   полилинии.прото =   "прото2"  ; 

  message   Point   { 
   требуется   int32   x   =   1  ; 
    требуется   int32   y   =   2  ; 
    необязательная   строковая   метка   =   3  ; 
  } 

 сообщения   Строка   { 
   обязательная   точка   start   =   1  ; 
    требуется   Point   end   =   2  ; 
    необязательная   строковая   метка   =   3  ; 
  } 

 сообщение   Polyline   { 
   повторяющаяся   Point   точка   =   1  ; 
    необязательная   строковая   метка   =   2  ; 
  } 

Сообщение «Точка» определяет два обязательных элемента данных: x и y . элемента данных Метка не является обязательной. Каждый элемент данных имеет тег. Тег определяется после знака равенства. Например, x имеет тег 1.

Сообщения «Линия» и «Полилиния», оба из которых используют точку, демонстрируют, как работает композиция в буферах протокола. Полилиния имеет повторяющееся поле, поэтому полилиния ведет себя как набор точек (неопределенного количества).

Эту схему впоследствии можно скомпилировать для использования одним или несколькими языками программирования. Google предоставляет компилятор под названием protocкоторый может производить вывод для C++, Java или Python. Другие компиляторы схем доступны из других источников и позволяют создавать зависящие от языка выходные данные для более чем 20 других языков. [11]

Например, после создания версии C++ схемы буфера протокола, описанной выше, файл исходного кода C++, Polyline.cpp, может использовать объекты сообщения следующим образом:

// Polyline.cpp 
 #include   "polyline.pb.h"  // генерируется вызовом "protoc polyline.proto" 

 Line  *   createNewLine  (  const   std  ::  string  &   name  )   { 
   // создаём линию от (10, 20) до (30, 40) 
   Строка  *   строка   =   новая   строка  ; 
    строка  ->  mutable_start  ()  ->  set_x  (  10  ); 
    строка  ->  mutable_start  ()  ->  set_y  (  20  ); 
    строка  ->  mutable_end  ()  ->  set_x  (  30  ); 
    строка  ->  mutable_end  ()  ->  set_y  (  40  ); 
    строка  ->  set_label  (  имя  ); 
    обратная   линия  ; 
  } 

 Polyline  *   createNewPolyline  ()   { 
   // создаем полилинию с точками (10,10) и (20,20) 
   Polyline  *   polyline   =   new   Polyline  ; 
    Точка  *   точка1   =   полилиния  ->  add_point  (); 
    точка1  ->  set_x  (  10  ); 
    точка1  ->  set_y  (  10  ); 
    Точка  *   точка2   =   полилиния  ->  add_point  (); 
    точка2  ->  set_x  (  20  ); 
    точка2  ->  set_y  (  20  ); 
    вернуть   полилинию  ; 
  } 

Языковая поддержка [ править ]

Protobuf 2.0 предоставляет генератор кода для C++ , Java , C# , [12] и Питон . [13]

Protobuf 3.0 предоставляет генератор кода для C++ , Java (включая JavaNano — диалект, предназначенный для малоресурсных сред ), Python , Go , Ruby , Objective-C , C# . [14] Он также поддерживает JavaScript, начиная с версии 3.0.0-beta-2. [15]

также доступны сторонние реализации Для Ballerina , [16] С , [17] [18] С++ , [19] Дротик , Эликсир , [20] [21] Эрланг , [22] Хаскелл , [23] JavaScript , [24] Юлия , [25] Nim , [26] Перл , PHP , Пролог , [27] [28] Р , [29] Ржавчина , [30] [31] [32] Скала , [33] и Свифт . [34]

См. также [ править ]

Ссылки [ править ]

  1. ^ «Часто задаваемые вопросы | Буферы протокола» . Разработчики Google . Проверено 2 октября 2016 г.
  2. ^ «Релизы — google/protobuf» — через GitHub .
  3. ^ Эйшай Смит. «Бенчмарки jvm-сериализаторов» . Гитхаб . Проверено 12 июля 2010 г.
  4. ^ Кентон Варда. «Ответ Стиву Виноски» . Проверено 14 июля 2008 г.
  5. ^ "грпк" . grpc.io. ​ Проверено 2 октября 2016 г.
  6. ^ «text_format.h — Буферы протокола — Код Google» . Проверено 2 марта 2012 г.
  7. ^ «Лучшие практики Proto | Документация по буферам протоколов» . Проверено 26 мая 2023 г.
  8. ^ «Обзор» . protobuf.dev . Проверено 28 мая 2023 г.
  9. ^ «Обзор» . protobuf.dev . Проверено 28 мая 2023 г.
  10. ^ «Обзор» . protobuf.dev . Проверено 28 мая 2023 г.
  11. ^ ThirdPartyAddOns — protobuf — Ссылки на сторонние дополнения. - Буферы протоколов - Формат обмена данными Google - Хостинг проектов Google . Код.google.com. Проверено 18 сентября 2013 г.
  12. ^ «Буферы протоколов в C#» . Блокировка кода . Проверено 12 мая 2017 г.
  13. ^ «Руководство по языку протокольных буферов» . Разработчики Google . Проверено 21 апреля 2016 г.
  14. ^ «Языковое руководство (proto3) | Буферы протоколов» . Разработчики Google . Проверено 9 августа 2020 г.
  15. ^ «Выпуск буферов протокола v3.0.0-beta-2 · протоколбуферы/protobuf» . Гитхаб . Проверено 9 августа 2020 г.
  16. ^ «Балерина-ГРПК» . Архивировано из оригинала 15 ноября 2021 г. Проверено 24 марта 2021 г.
  17. ^ «Nanopb — буферы протокола с малым размером кода» . Проверено 12 декабря 2017 г.
  18. ^ «Реализация протокольных буферов на C» . Гитхаб . Проверено 12 декабря 2017 г.
  19. ^ «Встроенный Proto-Protobuf для микроконтроллеров» . Проверено 15 августа 2021 г.
  20. ^ «Протокс» . Гитхаб . 25 октября 2021 г.
  21. ^ «Протобуф-эликсир» . Гитхаб . 26 октября 2021 г.
  22. ^ «Томас-Абрахамссон/GPB» . Гитхаб . 19 октября 2021 г.
  23. ^ «Протолинза» . Гитхаб . 16 октября 2021 г.
  24. ^ «Буферы протокола для JavaScript» . github.com . Проверено 14 мая 2016 г.
  25. ^ «ThirdPartyAddOns — protobuf — Ссылки на сторонние дополнения. — Буферы протоколов — Формат обмена данными Google — Хостинг проектов Google» . Проверено 7 ноября 2012 г.
  26. ^ «Реализация Protobuf в чистом Nim, которая использует возможности макросистемы, чтобы не зависеть от каких-либо внешних инструментов» . Гитхаб . 21 октября 2021 г.
  27. ^ «SWI-Prolog: библиотека буферов протоколов Google» .
  28. ^ «SWI-Prolog/contrib-protobufs» . Гитхаб . Проверено 21 апреля 2022 г.
  29. ^ «РПротоБуф» . Гитхаб .
  30. ^ «Ржавчина-протобуф» . Гитхаб . 26 октября 2021 г.
  31. ^ «ПРОСТ!» . Гитхаб . 21 августа 2021 г.
  32. ^ «Быстрый-протобуф» . Гитхаб . 12 октября 2021 г.
  33. ^ «СкалаПБ» . Гитхаб . Проверено 27 сентября 2022 г.
  34. ^ «Свифт Протобуф» . Гитхаб . 26 октября 2021 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0448351BE8BF296FF450D848346A1D30__1715212800
URL1:https://en.wikipedia.org/wiki/Protocol_Buffers
Заголовок, (Title) документа по адресу, URL1:
Protocol Buffers - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)