Protocol Buffers v3.0.0-alpha-3
Pre-releaseVersion 3.0.0-alpha-3 (C++/Java/Python/Ruby/JavaNano/Objective-C/C#)
General
-
Introduced two new language implementations (Objective-C, C#) to proto3.
-
Explicit "optional" keyword are disallowed in proto3 syntax, as fields are
optional by default. -
Group fields are no longer supported in proto3 syntax.
-
Changed repeated primitive fields to use packed serialization by default in
proto3 (implemented for C++, Java, Python in this release). The user can
still disable packed serialization by setting packed to false for now. -
Added well-known type protos (any.proto, empty.proto, timestamp.proto,
duration.proto, etc.). Users can import and use these protos just like
regular proto files. Addtional runtime support will be added for them in
future releases (in the form of utility helper functions, or having them
replaced by language specific types in generated code). -
Added a "reserved" keyword in both proto2 and proto3 syntax. User can use
this keyword to declare reserved field numbers and names to prevent them
from being reused by other fields in the same message.To reserve field numbers, add a reserved declaration in your message:
message TestMessage { reserved 2, 15, 9 to 11, 3; }
This reserves field numbers 2, 3, 9, 10, 11 and 15. If a user uses any of
these as field numbers, the protocol buffer compiler will report an error.Field names can also be reserved:
message TestMessage { reserved "foo", "bar"; }
-
Various bug fixes since 3.0.0-alpha-2
Objective-C
-
Objective-C includes a code generator and a native objective-c runtime
library. By adding “--objc_out” to protoc, the code generator will generate
a header(.pbobjc.h) and an implementation file(.pbobjc.m) for each proto
file.In this first release, the generated interface provides: enums, messages,
field support(single, repeated, map, oneof), proto2 and proto3 syntax
support, parsing and serialization. It’s compatible with ARC and non-ARC
usage. Besides, user can also access it via the swift bridging header.See objectivec/README.md for details.
C#
-
C# protobufs are based on project
https://github.com/jskeet/protobuf-csharp-port. The original project was
frozen and all the new development will happen here. -
Codegen plugin for C# was completely rewritten to C++ and is now an
intergral part of protoc. -
Some refactorings and cleanup has been applied to the C# runtime library.
-
Only proto2 is supported in C# at the moment, proto3 support is in
progress and will likely bring significant breaking changes to the API.See csharp/README.md for details.
C++
-
Added runtime support for Any type. To use Any in your proto file, first
import the definition of Any:// foo.proto import "google/protobuf/any.proto"; message Foo { google.protobuf.Any any_field = 1; } message Bar { int32 value = 1; }
Then in C++ you can access the Any field using PackFrom()/UnpackTo()
methods:Foo foo; Bar bar = ...; foo.mutable_any_field()->PackFrom(bar); ... if (foo.any_field().IsType<Bar>()) { foo.any_field().UnpackTo(&bar); ... }
-
In text format, entries of a map field will be sorted by key.
Java
- Continued optimizations on the lite runtime to improve performance for
Android.
Python
- Added map support.
- maps now have a dict-like interface (msg.map_field[key] = value)
- existing code that modifies maps via the repeated field interface
will need to be updated.
Ruby
- Improvements to RepeatedField's emulation of the Ruby Array API.
- Various speedups and internal cleanups.