Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.3 KiB
84 lines
2.3 KiB
|
|
# μpb: small, fast C protos |
|
|
|
μpb (often written 'upb') is a small |
|
[protobuf](https://github.com/protocolbuffers/protobuf) implementation written |
|
in C. |
|
|
|
upb is the core runtime for protobuf languages extensions in |
|
[Ruby](https://github.com/protocolbuffers/protobuf/tree/main/ruby), |
|
[PHP](https://github.com/protocolbuffers/protobuf/tree/main/php), and |
|
[Python](https://github.com/protocolbuffers/protobuf/tree/main/python). |
|
|
|
While upb offers a C API, the C API & ABI **are not stable**. For this reason, |
|
upb is not generally offered as a C library for direct consumption, and there |
|
are no releases. |
|
|
|
## Features |
|
|
|
upb has comparable speed to protobuf C++, but is an order of magnitude smaller |
|
in code size. |
|
|
|
Like the main protobuf implementation in C++, it supports: |
|
|
|
- a generated API (in C) |
|
- reflection |
|
- binary & JSON wire formats |
|
- text format serialization |
|
- all standard features of protobufs (oneofs, maps, unknown fields, extensions, |
|
etc.) |
|
- full conformance with the protobuf conformance tests |
|
|
|
upb also supports some features that C++ does not: |
|
|
|
- **optional reflection:** generated messages are agnostic to whether |
|
reflection will be linked in or not. |
|
- **no global state:** no pre-main registration or other global state. |
|
- **fast reflection-based parsing:** messages loaded at runtime parse |
|
just as fast as compiled-in messages. |
|
|
|
However there are a few features it does not support: |
|
|
|
- text format parsing |
|
- deep descriptor verification: upb's descriptor validation is not as exhaustive |
|
as `protoc`. |
|
|
|
## Install |
|
|
|
For Ruby, use [RubyGems](https://rubygems.org/gems/google-protobuf): |
|
|
|
``` |
|
$ gem install google-protobuf |
|
``` |
|
|
|
For PHP, use [PECL](https://pecl.php.net/package/protobuf): |
|
|
|
``` |
|
$ sudo pecl install protobuf |
|
``` |
|
|
|
For Python, use [PyPI](https://pypi.org/project/protobuf/): |
|
|
|
``` |
|
$ sudo pip install protobuf |
|
``` |
|
|
|
Alternatively, you can build and install upb using |
|
[vcpkg](https://github.com/microsoft/vcpkg/) dependency manager: |
|
|
|
git clone https://github.com/Microsoft/vcpkg.git |
|
cd vcpkg |
|
./bootstrap-vcpkg.sh |
|
./vcpkg integrate install |
|
./vcpkg install upb |
|
|
|
The upb port in vcpkg is kept up to date by microsoft team members and community |
|
contributors. |
|
|
|
If the version is out of date, please |
|
[create an issue or pull request](https://github.com/Microsoft/vcpkg) on the |
|
vcpkg repository. |
|
|
|
## Contributing |
|
|
|
Please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|