Protocol Buffers v3.0.0-beta-1
Pre-release
Pre-release
Version 3.0.0-beta-1
Supported languages
- C++/Java/Python/Ruby/Nano/Objective-C/C#
About Beta
- This is the first beta release of protobuf v3.0.0. Not all languages
have reached beta stage. Languages not marked as beta are still in
alpha (i.e., be prepared for API breaking changes).
General
-
Proto3 JSON is supported in several languages (fully supported in C++
and Java, partially supported in Ruby/C#). The JSON spec is defined in
the proto3 language guide:https://developers.google.com/protocol-buffers/docs/proto3#json
We will publish a more detailed spec to define the exact behavior of
proto3-conformant JSON serializers and parsers. Until then, do not rely
on specific behaviors of the implementation if it’s not documented in
the above spec. More specifically, the behavior is not yet finalized for
the following:- Parsing invalid JSON input (e.g., input with trailing commas).
- Non-camelCase names in JSON input.
- The same field appears multiple times in JSON input.
- JSON arrays contain “null” values.
- The message has unknown fields.
-
Proto3 now enforces strict UTF-8 checking. Parsing will fail if a string
field contains non UTF-8 data.
C++ (Beta)
- Introduced new utility functions/classes in the google/protobuf/util
directory:- MessageDifferencer: compare two proto messages and report their
differences. - JsonUtil: support converting protobuf binary format to/from JSON.
- TimeUtil: utility functions to work with well-known types Timestamp
and Duration. - FieldMaskUtil: utility functions to work with FieldMask.
- MessageDifferencer: compare two proto messages and report their
- Performance optimization of arena construction and destruction.
- Bug fixes for arena and maps support.
- Changed to use cmake for Windows Visual Studio builds.
- Added Bazel support.
Java (Beta)
- Introduced a new util package that will be distributed as a separate
artifact in maven. It contains:- JsonFormat: convert proto messages to/from JSON.
- TimeUtil: utility functions to work with Timestamp and Duration.
- FieldMaskUtil: utility functions to work with FieldMask.
- The static PARSER in each generated message is deprecated, and it will
be removed in a future release. A static parser() getter is generated
for each message type instead. - Performance optimizations for String fields serialization.
- Performance optimizations for Lite runtime on Android:
- Reduced allocations
- Reduced method overhead after ProGuarding
- Reduced code size after ProGuarding
Python (Alpha)
- Removed legacy Python 2.5 support.
- Moved to a single Python 2.x/3.x-compatible codebase, instead of using 2to3.
- Fixed build/tests on Python 2.6, 2.7, 3.3, and 3.4.
- Pure-Python works on all four.
- Python/C++ implementation works on all but 3.4, due to changes in the
Python/C++ API in 3.4.
- Some preliminary work has been done to allow for multiple DescriptorPools
with Python/C++.
Ruby (Alpha)
- Many bugfixes:
- fixed parsing/serialization of bytes, sint, sfixed types
- other parser bugfixes
- fixed memory leak affecting Ruby 2.2
JavaNano (Alpha)
- JavaNano generated code now will be put in a nano package by default to
avoid conflicts with Java generated code.
Objective-C (Alpha)
- Added non-null markup to ObjC library. Requires SDK 8.4+ to build.
- Many bugfixes:
- Removed the class/enum filter.
- Renamed some internal types to avoid conflicts with the well-known types
protos. - Added missing support for parsing repeated primitive fields in packed or
unpacked forms. - Added *Count for repeated and map<> fields to avoid auto-create when
checking for them being set.
C# (Alpha)
- Namespace changed to Google.Protobuf (and NuGet package will be named
correspondingly). - Target platforms now .NET 4.5 and selected portable subsets only.
- Removed lite runtime.
- Reimplementation to use mutable message types.
- Null references used to represent "no value" for message type fields.
- Proto3 semantics supported; proto2 files are prohibited for C# codegen.
Most proto3 features supported:- JSON formatting (a.k.a. serialization to JSON), including well-known
types (except for Any). - Wrapper types mapped to nullable value types (or string/ByteString
allowing nullability). JSON parsing is not supported yet. - maps
- oneof
- enum unknown value preservation
- JSON formatting (a.k.a. serialization to JSON), including well-known