|
|
@ -1,3 +1,102 @@ |
|
|
|
|
|
|
|
2015-05-25 version 3.0.0-alpha-3 (Objective-C/C#): |
|
|
|
|
|
|
|
General |
|
|
|
|
|
|
|
* Introduced two new language implementations (Objective-C, C#) to proto3. |
|
|
|
|
|
|
|
* Disallowed "optional" keyword in proto3 syntax. |
|
|
|
|
|
|
|
* Removed groups fields 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. |
|
|
|
|
|
|
|
|
|
|
|
2015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano): |
|
|
|
2015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano): |
|
|
|
General |
|
|
|
General |
|
|
|
* Introduced three new language implementations (Ruby, JavaNano, and |
|
|
|
* Introduced three new language implementations (Ruby, JavaNano, and |
|
|
|