Protocol Buffers

Protocol Buffers
Developer(s)Google
Initial releaseEarly 2001 (internal)[1]
July 7, 2008 (2008-07-07) (public)
Stable release
28.3 Edit this on Wikidata / 22 October 2024; 40 days ago (22 October 2024)[2]
Repository
Written inC++, C#, Java, Python, JavaScript, Ruby, Go, PHP, Dart
Operating systemAny
PlatformCross-platform
Typeserialization format and library, IDL compiler
LicenseBSD
Websiteprotobuf.dev Edit this at Wikidata
Protocol Buffers
Filename extension
.proto
Internet media typeapplication/protobuf, application/vnd.google.protobuf
Developed byGoogle
Latest release
3
Type of formatInterface description language
Open format?Yes
Free format?Yes
Websiteprotobuf.dev Edit this at Wikidata

Protocol Buffers (Protobuf) is a free and open-source cross-platform data format used to serialize structured data. It is useful in developing programs that communicate with each other over a network or for storing data. The method involves an interface description language that describes the structure of some data and a program that generates source code from that description for generating or parsing a stream of bytes that represents the structured data.

Overview

Google developed Protocol Buffers for internal use and provided a code generator for multiple languages under an open-source license.

The design goals for Protocol Buffers emphasized simplicity and performance. In particular, it was designed to be smaller and faster than XML.[3]

Protocol Buffers is widely used at Google for storing and interchanging all kinds of structured information. The method serves as a basis for a custom remote procedure call (RPC) system that is used for nearly all inter-machine communication at Google.[4]

Protocol Buffers is similar to the Apache Thrift, Ion, and Microsoft Bond protocols, offering a concrete RPC protocol stack to use for defined services called gRPC.[5]

Data structure schemas (called messages) and services are described in a proto definition file (.proto) and compiled with protoc. This compilation generates code that can be invoked by a sender or recipient of these data structures. For example, example.pb.cc and example.pb.h are generated from example.proto. They define C++ classes for each message and service in example.proto.

Canonically, messages are serialized into a binary wire format which is compact, forward- and backward-compatible, but not self-describing (that is, there is no way to tell the names, meaning, or full datatypes of fields without an external specification). There is no defined way to include or refer to such an external specification (schema) within a Protocol Buffers file. The officially supported implementation includes an ASCII serialization format,[6] but this format—though self-describing—loses the forward- and backward-compatibility behavior, and is thus not a good choice for applications other than human editing and debugging.[7]

Though the primary purpose of Protocol Buffers is to facilitate network communication, its simplicity and speed make Protocol Buffers an alternative to data-centric C++ classes and structs, especially where interoperability with other languages or systems might be needed in the future.

Limitations

Protobufs have no single specification.[8] The format is best suited for small data chunks that don't exceed a few megabytes and can be loaded/sent into a memory right away and therefore is not a streamable format.[9] The library doesn't provide compression out of the box. The format also isn't well supported in non–object-oriented languages (e.g. Fortran).[10]

Example

A schema for a particular use of protocol buffers associates data types with field names, using integers to identify each field. (The protocol buffer data contains only the numbers, not the field names, providing some bandwidth/storage savings compared with systems that include the field names in the data.)

// polyline.proto
syntax = "proto2";

message Point {
  required int32 x = 1;
  required int32 y = 2;
  optional string label = 3;
}

message Line {
  required Point start = 1;
  required Point end = 2;
  optional string label = 3;
}

message Polyline {
  repeated Point point = 1;
  optional string label = 2;
}

The "Point" message defines two mandatory data items, x and y. The data item label is optional. Each data item has a tag. The tag is defined after the equal sign. For example, x has the tag 1.

The "Line" and "Polyline" messages, which both use Point, demonstrate how composition works in Protocol Buffers. Polyline has a repeated field, and thus Polyline behaves like a set of points (of unspecified number).

This schema can subsequently be compiled for use by one or more programming languages. Google provides a compiler called protoc which can produce output for C++, Java or Python. Other schema compilers are available from other sources to create language-dependent output for over 20 other languages.[11]

For example, after a C++ version of the protocol buffer schema above is produced, a C++ source code file, polyline.cpp, can use the message objects as follows:

// polyline.cpp
#include "polyline.pb.h"  // generated by calling "protoc polyline.proto"

Line* createNewLine(const std::string& name) {
  // create a line from (10, 20) to (30, 40)
  Line* line = new Line;
  line->mutable_start()->set_x(10);
  line->mutable_start()->set_y(20);
  line->mutable_end()->set_x(30);
  line->mutable_end()->set_y(40);
  line->set_label(name);
  return line;
}

Polyline* createNewPolyline() {
  // create a polyline with points at (10,10) and (20,20)
  Polyline* polyline = new Polyline;
  Point* point1 = polyline->add_point();
  point1->set_x(10);
  point1->set_y(10);
  Point* point2 = polyline->add_point();
  point2->set_x(20);
  point2->set_y(20);
  return polyline;
}

Language support

Protobuf 2.0 provides a code generator for C++, Java, C#,[12] and Python.[13]

Protobuf 3.0 provides a code generator for C++, Java (including JavaNano, a dialect intended for low-resource environments), Python, Go, Ruby, Objective-C, C#.[14] It also supports JavaScript since 3.0.0-beta-2.[15]

Third-party implementations are also available for Ballerina,[16] C,[17][18] C++,[19] Dart, Elixir,[20][21] Erlang,[22] Haskell,[23] JavaScript,[24] Julia,[25] Nim,[26] Perl, PHP, Prolog,[27][28] R,[29] Rust,[30][31][32] Scala,[33] and Swift.[34]

See also

References

  1. ^ "Frequently Asked Questions | Protocol Buffers". Google Developers. Retrieved 2 October 2016.
  2. ^ "Releases - google/protobuf" – via GitHub.
  3. ^ Eishay Smith. "jvm-serializers Benchmarks". GitHub. Retrieved 2010-07-12.
  4. ^ Kenton Varda. "A response to Steve Vinoski". Retrieved 2008-07-14.
  5. ^ "grpc". grpc.io. Retrieved 2 October 2016.
  6. ^ "text_format.h - Protocol Buffers - Google Code". Retrieved 2012-03-02.
  7. ^ "Proto Best Practices | Protocol Buffers Documentation". Retrieved 2023-05-26.
  8. ^ "Overview". protobuf.dev. Retrieved 2023-05-28.
  9. ^ "Overview". protobuf.dev. Retrieved 2023-05-28.
  10. ^ "Overview". protobuf.dev. Retrieved 2023-05-28.
  11. ^ ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting. Code.google.com. Retrieved on 2013-09-18.
  12. ^ "Protocol Buffers in C#". Code Blockage. Retrieved 2017-05-12.
  13. ^ "Protocol Buffers Language Guide". Google Developers. Retrieved 2016-04-21.
  14. ^ "Language Guide (proto3) | Protocol Buffers". Google Developers. Retrieved 2020-08-09.
  15. ^ "Release Protocol Buffers v3.0.0-beta-2 · protocolbuffers/protobuf". GitHub. Retrieved 2020-08-09.
  16. ^ "Ballerina - GRPC". Archived from the original on 2021-11-15. Retrieved 2021-03-24.
  17. ^ "Nanopb - protocol buffers with small code size". Retrieved 2017-12-12.
  18. ^ "Protocol Buffers implementation in C". GitHub. Retrieved 2017-12-12.
  19. ^ "Embedded Proto - Protobuf for microcontrollers". Retrieved 2021-08-15.
  20. ^ "Protox". GitHub. 25 October 2021.
  21. ^ "Protobuf-elixir". GitHub. 26 October 2021.
  22. ^ "Tomas-abrahamsson/GPB". GitHub. 19 October 2021.
  23. ^ "Proto-lens". GitHub. 16 October 2021.
  24. ^ "Protocol Buffers for JavaScript". github.com. Retrieved 2016-05-14.
  25. ^ "ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting". Retrieved 2012-11-07.
  26. ^ "Protobuf implementation in pure Nim that leverages the power of the macro system to not depend on any external tools". GitHub. 21 October 2021.
  27. ^ "SWI-Prolog: Google's Protocol Buffers Library".
  28. ^ "SWI-Prolog / contrib-protobufs". GitHub. Retrieved 2022-04-21.
  29. ^ "RProtoBuf". GitHub.
  30. ^ "Rust-protobuf". GitHub. 26 October 2021.
  31. ^ "PROST!". GitHub. 21 August 2021.
  32. ^ "Quick-protobuf". GitHub. 12 October 2021.
  33. ^ "ScalaPB". GitHub. Retrieved 27 September 2022.
  34. ^ "Swift Protobuf". GitHub. 26 October 2021.

Read other articles:

Lukisan karya Ferdinand Victor Eugène Delacroix dari seorang malaikat (Kamael) mengusir Adam dan Hawa dengan pedang api. Menurut Robert Means Lawrence,[1] Arthur de Bles, dan R.L. Giles, malaikat yang mengusir Adam dan Hawa dari Taman Eden adalah Yofiel.[2] Pedang api adalah sebuah pedang yang dapat mengeluarkan api oleh beberapa kekuatan supranatural. Pedang api muncul dalam legenda dan mitos selama ribuan tahun. Dalam mitologi Sumeria, dewa yang dikenal sebagai Asaruludu ad...

 

 

Bornholm Géographie Pays Danemark Localisation Mer Baltique Coordonnées 55° 07′ 30″ N, 14° 55′ 00″ E Administration Région Hovedstaden Démographie Population 39 545 hab. (2022[1]) Autres informations Géolocalisation sur la carte : Hovedstaden BornholmBornholm Géolocalisation sur la carte : Danemark BornholmBornholm Géolocalisation sur la carte : mer Baltique BornholmBornholm Île au Danemark modifier  Bornholm ...

 

 

LecceKomuneComune di LecceChurch of Santa CroceNegaraItaliaWilayahPugliaProvinsiLecce (LE)didirikan200-an SM [1]Pemerintahan • Wali kotaPaolo PerroneLuas • Total398 km2 (154 sq mi)Ketinggian49 m (161 ft)Populasi (30 November 2009) • Total95.200 • Kepadatan240/km2 (620/sq mi)Zona waktuUTC+1 (CET) • Musim panas (DST)UTC+2 (CEST)Kode pos73100Kode area telepon0832Santo/a PelindungOrontiusSitus w...

Tuan Kebawah Duli Yang Maha Mulia Paduka Panembahan Amiruddin Khalifatul Mukminin Pangeran AntasariPanembahan (Sultan) Banjar XVI[1]Lukisan Pangeran Antasari menurut Perda KalselBerkuasa14 Maret 1862 - 11 Oktober 1862PendahuluSultan Hidayatullah II dari BanjarPenerusSultan Muhammad SemanRajaLihat daftarKelahiranGusti Inu Kartapati1809Kayu Tangi, Kesultanan Banjar, 1797[2][3] atau 1809[4][5][6][7]Kematian11 Oktober 1862(1862-10-11) (umur&...

 

 

Joseph W. FarnhamLahir(1884-12-02)2 Desember 1884New Haven, ConnecticutMeninggal2 Juni 1931(1931-06-02) (umur 46)Los Angeles, California, ASSebab meninggalSerangan jantungPekerjaanPenulis latarTahun aktif1918-1930 Joseph White Farnham (2 Desember 1884 – 2 Juni 1931) adalah seorang pengarang drama dan penulis film dan penyunting film Amerika dari zaman film bisu sampai awal 1930an. Ia juga menjadi anggota pendiri dari Academy of Motion Picture Arts and Sciences. Ia lahir di C...

 

 

Inside ManPoster film Inside ManSutradaraSpike LeeProduserBrian GrazerDitulis olehRussell GewirtzPemeranDenzel WashingtonClive OwenJodie FosterWillem DafoeChristopher PlummerChiwetel EjioforPenata musikTerence BlanchardSinematograferMatthew LibatiquePenyuntingBarry Alexander BrownPerusahaanproduksiImagine EntertainmentDistributorUniversal PicturesTanggal rilis23 Maret 2006Durasi129 menitNegara Amerika SerikatBahasaInggrisAnggaran$45 jutaPendapatankotor$184.376.254IMDbInformasi di I...

Sex PistolsAsalLondon, InggrisGenrePunk rockTahun aktif1975–197819962002–20032007–presentLabelEMI, A&M, Virgin, Warner Bros.Artis terkaitPublic Image Ltd.The ProfessionalsMalcolm McLarenThe Rich KidsNeurotic OutsidersVicious White KidsSham PistolsThe Ex PistolsSiouxsie and the BansheesThe Flowers of RomanceSitus webhttp://www.sexpistolsofficial.comAnggotaJohn LydonSteve JonesPaul CookGlen MatlockMantan anggotaSid Vicious Sex Pistols (1977) Sex Pistols adalah salah satu kelompok musi...

 

 

1977 studio album by Slim WhitmanHome on the RangeStudio album by Slim WhitmanReleased1977RecordedApril 27–29, 1977; Woodland Studios, East Nashville, TennesseeGenreFolk, World, CountryLabelUnited Artists RecordsProducerAlan Warner, Scott Turner (songwriter)Slim Whitman chronology Red River Valley(1977) Home on the Range(1977) Song I Love to Sing(1980) Home on the Range is a 1977 folk, world and country music album recorded by Slim Whitman.[1] An album of standards from the ...

 

 

Road in England This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: A624 road – news · newspapers · books · scholar · JSTOR (November 2022) This arti...

For the earlier script from which all of the Brahmic scripts derived, see Brahmi script. Family of abugida writing systems This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Brahmic scripts – news · newspapers · books · scholar · JSTOR (January 2023) (Learn how and when to remove this message) Writing systems A...

 

 

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目需要編修,以確保文法、用詞、语气、格式、標點等使用恰当。 (2015年7月23日)請按照校對指引,幫助编辑這個條目。(幫助、討論) 此條目內容疑欠准确,有待查證。 (2015年7月23日)請在讨论页討論問題所在及加以改善,若此條目仍有爭議及准确度欠佳,會被提出存廢討論。 此條目之中立性有�...

 

 

British company For other companies with similar names, see Sig. SIG plcCompany typePublicTraded asLSE: SHIIndustryConstruction Products, off site manufacturingFounded1957FounderErnest Adsetts HeadquartersSheffield, South Yorkshire, United KingdomKey peopleAndrew Allner, Chairman Gavin Slark, CEORevenue £2,761.2 million (2023)[1]Operating income £53.1 million (2023)[1]Net income £(43.4) million (2023)[1]Websitewww.sigplc.com SIG plc is a British-based inte...

Economic and wage policy model Part of a series onSocial democracy History Age of Enlightenment Frankfurt Declaration French Revolution Godesberg Program Humanism Internationalist–defencist schism Keynesianism Labor movement Marxism Orthodox Revisionist Nordic model Reformist–revolutionary dispute Socialism Revolutions of 1848 Utopian socialism Welfare capitalism Concepts Civil liberties Critical theory Democracy Economic Industrial Representative Dirigisme Environmentalism Environmental ...

 

 

American composer and musician Tom KittKitt in May 2018BornThomas Robert KittEducationColumbia University (BA)Occupation(s)Composer, conductor, orchestrator, musicianSpouseRita Pietropinto (m. 2000)Children3AwardsPulitzer Prize for DramaTony AwardOuter Critics Circle AwardPrimetime Emmy AwardGrammy Award Thomas Robert Kitt[1] is an American composer, conductor, orchestrator, and musician. For his score for the musical Next to Normal, he shared the 2010 Pulitzer Prize for Drama with Br...

 

 

Templo del Sol, Konark Patrimonio de la Humanidad de la Unesco Vista del templo.LocalizaciónPaís  IndiaDatos generalesTipo CulturalCriterios i, iii, viIdentificación 246Región Asia y OceaníaInscripción 1984 (VIII sesión) Sitio web oficial [editar datos en Wikidata] Localización de Konark en la India. Se encuentra a 36 km de la ciudad sagrada de Puri. El templo de Suria (también llamado la Pagoda negra o Templo del Sol) es un templo hindú situado en la localidad de Kon...

  لمعانٍ أخرى، طالع كان (توضيح). كان    علم شعار الاسم الرسمي (بالفرنسية: Cannes)‏    الإحداثيات 43°33′09″N 7°01′17″E / 43.5525°N 7.0213888888889°E / 43.5525; 7.0213888888889 [1]  [2] تقسيم إداري  البلد فرنسا[3][4]  التقسيم الأعلى الألب البحرية  خصائص جغر�...

 

 

Sinotruk (Hong Kong) LimitedCompany typePublicTraded asSEHK: 3808ISINHK3808041546IndustrymanufacturingFounded31 January 2007; 17 years ago (2007-01-31)FounderSinotruk GroupHeadquarters Hong Kong, China (registered office) Jinan, China (de facto) Area servedWorldwideKey peopleCai Dong (Chairman and President)ProductsTrucksOwner Sinotruk Group (51%) Traton (25%) Parent Sinotruk (BVI) Limited (direct) Sinotruk Group (intermediate) Chinese Central Government (ultimate) Sub...

 

 

Marcelo MeloKebangsaan BrasilTempat tinggalBelo Horizonte, BrasilLahir23 September 1983 (umur 40)Belo Horizonte, BrasilTinggi203 cm (6 ft 8 in)Memulai pro1998Total hadiah$4,424,051TunggalRekor (M–K)1–0Gelar0Peringkat tertinggiNo. 273 (21 November 2005)GandaRekor (M–K)399–251 (61.38%)Gelar24Peringkat tertinggiNo. 1 (2 November 2015)Peringkat saat iniNo. 4 (29 Mei 2017)Statistik terbaru dimutakhir pada 29 Mei 2017. Nama ini menggunakan cara penamaan Portugis. Na...

裴瑟琪배슬기女演员罗马拼音Bae Seul-Ki国籍 韩国出生 (1986-09-27) 1986年9月27日(38歲) 韩国京畿道加平郡职业歌手、演員语言韓語、英語、中文 母校祥明大學演劇學系出道日期2005年活跃年代2005年至今经纪公司Chan Entertainment(2023年—)[1]相关团体The Red 裴瑟琪(韓語:배슬기,1986年9月27日—),常譯為裴涩琪,韓國女歌手、演員。出道時以三人女子組合The Red的...

 

 

Ancient Egyptian goddess TefnutThe goddess Tefnut portrayed as a woman with the head of a lioness and a sun disc resting on her head.Name in hieroglyphs Major cult centerHeliopolis, LeontopolisSymbol Lioness, Sun DiskGenealogyParentsRa or AtumSiblingsShu, Hathor, Maat, Anhur, Sekhmet, Bastet, Mafdet, SatetConsortShu, GebOffspringGeb and Nut Tefnut (Ancient Egyptian: tfn.t; Coptic: ⲧϥⲏⲛⲉ tfēne)[1][2] is a deity of moisture, moist air, dew and rain in Ancient Egyptian ...