Index: third_party/protobuf/CHANGES.txt |
diff --git a/third_party/protobuf/CHANGES.txt b/third_party/protobuf/CHANGES.txt |
index a21e956c357e6171bc8a195e2d42b1c5c5b0f4dc..c710cd5e7f130e282bb059a9c3d98b9d1bf418ac 100644 |
--- a/third_party/protobuf/CHANGES.txt |
+++ b/third_party/protobuf/CHANGES.txt |
@@ -1,4 +1,519 @@ |
-2012-09-19 version 2.5.0: |
+2015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaSript) |
+ General |
+ * Intorduced a new language implementaion: JavaScript. |
+ * Added a new field option "json_name". By default proto field names are |
+ converted to "lowerCamelCase" in proto3 JSON format. This option can be |
+ used to override this behavior and specify a different JSON name for the |
+ field. |
+ * Added conformance tests to ensure implementations are following proto3 JSON |
+ specification. |
+ |
+ C++ (Beta) |
+ * Various bug fixes and improvements to the JSON support utility: |
+ - Duplicate map keys in JSON are now rejected (i.e., translation will |
+ fail). |
+ - Fixed wire-format for google.protobuf.Value/ListValue. |
+ - Fixed precision loss when converting google.protobuf.Timestamp. |
+ - Fixed a bug when parsing invalid UTF-8 code points. |
+ - Fixed a memory leak. |
+ - Reduced call stack usage. |
+ |
+ Java (Beta) |
+ * Cleaned up some unused methods on CodedOutputStream. |
+ * Presized lists for packed fields during parsing in the lite runtime to |
+ reduce allocations and improve performance. |
+ * Improved the performance of unknown fields in the lite runtime. |
+ * Introduced UnsafeByteStrings to support zero-copy ByteString creation. |
+ * Various bug fixes and improvements to the JSON support utility: |
+ - Fixed a thread-safety bug. |
+ - Added a new option “preservingProtoFieldNames” to JsonFormat. |
+ - Added a new option “includingDefaultValueFields” to JsonFormat. |
+ - Updated the JSON utility to comply with proto3 JSON specification. |
+ |
+ Python (Beta) |
+ * Added proto3 JSON format utility. It includes support for all field types |
+ and a few well-known types except for Any and Struct. |
+ * Added runtime support for Any, Timestamp, Duration and FieldMask. |
+ * [ ] is now accepted for repeated scalar fields in text format parser. |
+ |
+ Objective-C (Beta) |
+ * Various bug-fixes and code tweaks to pass more strict compiler warnings. |
+ * Now has conformance test coverage and is passing all tests. |
+ |
+ C# (Beta) |
+ * Various bug-fixes. |
+ * Code generation: Files generated in directories based on namespace. |
+ * Code generation: Include comments from .proto files in XML doc |
+ comments (naively) |
+ * Code generation: Change organization/naming of "reflection class" (access |
+ to file descriptor) |
+ * Code generation and library: Add Parser property to MessageDescriptor, |
+ and introduce a non-generic parser type. |
+ * Library: Added TypeRegistry to support JSON parsing/formatting of Any. |
+ * Library: Added Any.Pack/Unpack support. |
+ * Library: Implemented JSON parsing. |
+ |
+ Javascript (Alpha) |
+ * Added proto3 support for JavaScript. The runtime is written in pure |
+ JavaScript and works in browsers and in Node.js. To generate JavaScript |
+ code for your proto, invoke protoc with "--js_out". See js/README.md |
+ for more build instructions. |
+ |
+2015-08-26 version 3.0.0-beta-1 (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. |
+ |
+ * 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 |
+ |
+2015-05-25 version 3.0.0-alpha-3 (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. |
+ |
+2015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano): |
+ General |
+ * Introduced three new language implementations (Ruby, JavaNano, and |
+ Python) to proto3. |
+ * Various bug fixes since 3.0.0-alpha-1 |
+ |
+ Python: |
+ Python has received several updates, most notably support for proto3 |
+ semantics in any .proto file that declares syntax="proto3". |
+ Messages declared in proto3 files no longer represent field presence |
+ for scalar fields (number, enums, booleans, or strings). You can |
+ no longer call HasField() for such fields, and they are serialized |
+ based on whether they have a non-zero/empty/false value. |
+ |
+ One other notable change is in the C++-accelerated implementation. |
+ Descriptor objects (which describe the protobuf schema and allow |
+ reflection over it) are no longer duplicated between the Python |
+ and C++ layers. The Python descriptors are now simple wrappers |
+ around the C++ descriptors. This change should significantly |
+ reduce the memory usage of programs that use a lot of message |
+ types. |
+ |
+ Ruby: |
+ We have added proto3 support for Ruby via a native C extension. |
+ |
+ The Ruby extension itself is included in the ruby/ directory, and details on |
+ building and installing the extension are in ruby/README.md. The extension |
+ will also be published as a Ruby gem. Code generator support is included as |
+ part of `protoc` with the `--ruby_out` flag. |
+ |
+ The Ruby extension implements a user-friendly DSL to define message types |
+ (also generated by the code generator from `.proto` files). Once a message |
+ type is defined, the user may create instances of the message that behave in |
+ ways idiomatic to Ruby. For example: |
+ |
+ - Message fields are present as ordinary Ruby properties (getter method |
+ `foo` and setter method `foo=`). |
+ - Repeated field elements are stored in a container that acts like a native |
+ Ruby array, and map elements are stored in a container that acts like a |
+ native Ruby hashmap. |
+ - The usual well-known methods, such as `#to_s`, `#dup`, and the like, are |
+ present. |
+ |
+ Unlike several existing third-party Ruby extensions for protobuf, this |
+ extension is built on a "strongly-typed" philosophy: message fields and |
+ array/map containers will throw exceptions eagerly when values of the |
+ incorrect type are inserted. |
+ |
+ See ruby/README.md for details. |
+ |
+ JavaNano: |
+ JavaNano is a special code generator and runtime library designed especially |
+ for resource-restricted systems, like Android. It is very resource-friendly |
+ in both the amount of code and the runtime overhead. Here is an an overview |
+ of JavaNano features compared with the official Java protobuf: |
+ |
+ - No descriptors or message builders. |
+ - All messages are mutable; fields are public Java fields. |
+ - For optional fields only, encapsulation behind setter/getter/hazzer/ |
+ clearer functions is opt-in, which provide proper 'has' state support. |
+ - For proto2, if not opted in, has state (field presence) is not available. |
+ Serialization outputs all fields not equal to their defaults. |
+ The behavior is consistent with proto3 semantics. |
+ - Required fields (proto2 only) are always serialized. |
+ - Enum constants are integers; protection against invalid values only |
+ when parsing from the wire. |
+ - Enum constants can be generated into container interfaces bearing |
+ the enum's name (so the referencing code is in Java style). |
+ - CodedInputByteBufferNano can only take byte[] (not InputStream). |
+ - Similarly CodedOutputByteBufferNano can only write to byte[]. |
+ - Repeated fields are in arrays, not ArrayList or Vector. Null array |
+ elements are allowed and silently ignored. |
+ - Full support for serializing/deserializing repeated packed fields. |
+ - Support extensions (in proto2). |
+ - Unset messages/groups are null, not an immutable empty default |
+ instance. |
+ - toByteArray(...) and mergeFrom(...) are now static functions of |
+ MessageNano. |
+ - The 'bytes' type translates to the Java type byte[]. |
+ |
+ See javanano/README.txt for details. |
+ |
+2014-12-01 version 3.0.0-alpha-1 (C++/Java): |
+ |
+ General |
+ * Introduced Protocol Buffers language version 3 (aka proto3). |
+ |
+ When protobuf was initially opensourced it implemented Protocol Buffers |
+ language version 2 (aka proto2), which is why the version number |
+ started from v2.0.0. From v3.0.0, a new language version (proto3) is |
+ introduced while the old version (proto2) will continue to be supported. |
+ |
+ The main intent of introducing proto3 is to clean up protobuf before |
+ pushing the language as the foundation of Google's new API platform. |
+ In proto3, the language is simplified, both for ease of use and to |
+ make it available in a wider range of programming languages. At the |
+ same time a few features are added to better support common idioms |
+ found in APIs. |
+ |
+ The following are the main new features in language version 3: |
+ |
+ 1. Removal of field presence logic for primitive value fields, removal |
+ of required fields, and removal of default values. This makes proto3 |
+ significantly easier to implement with open struct representations, |
+ as in languages like Android Java, Objective C, or Go. |
+ 2. Removal of unknown fields. |
+ 3. Removal of extensions, which are instead replaced by a new standard |
+ type called Any. |
+ 4. Fix semantics for unknown enum values. |
+ 5. Addition of maps. |
+ 6. Addition of a small set of standard types for representation of time, |
+ dynamic data, etc. |
+ 7. A well-defined encoding in JSON as an alternative to binary proto |
+ encoding. |
+ |
+ This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and |
+ Java. Items 6 (well-known types) and 7 (JSON format) in the above feature |
+ list are not impelmented. |
+ |
+ A new notion "syntax" is introduced to specify whether a .proto file |
+ uses proto2 or proto3: |
+ |
+ // foo.proto |
+ syntax = "proto3"; |
+ message Bar {...} |
+ |
+ If omitted, the protocol compiler will generate a warning and "proto2" will |
+ be used as the default. This warning will be turned into an error in a |
+ future release. |
+ |
+ We recommend that new Protocol Buffers users use proto3. However, we do not |
+ generally recommend that existing users migrate from proto2 from proto3 due |
+ to API incompatibility, and we will continue to support proto2 for a long |
+ time. |
+ |
+ * Added support for map fields (implemented in C++/Java for both proto2 and |
+ proto3). |
+ |
+ Map fields can be declared using the following syntax: |
+ |
+ message Foo { |
+ map<string, string> values = 1; |
+ } |
+ |
+ Data of a map field will be stored in memory as an unordered map and it |
+ can be accessed through generated accessors. |
+ |
+ C++ |
+ * Added arena allocation support (for both proto2 and proto3). |
+ |
+ Profiling shows memory allocation and deallocation constitutes a significant |
+ fraction of CPU-time spent in protobuf code and arena allocation is a |
+ technique introduced to reduce this cost. With arena allocation, new |
+ objects will be allocated from a large piece of preallocated memory and |
+ deallocation of these objects is almost free. Early adoption shows 20% to |
+ 50% improvement in some Google binaries. |
+ |
+ To enable arena support, add the following option to your .proto file: |
+ |
+ option cc_enable_arenas = true; |
+ |
+ Protocol compiler will generate additional code to make the generated |
+ message classes work with arenas. This does not change the existing API |
+ of protobuf messages and does not affect wire format. Your existing code |
+ should continue to work after adding this option. In the future we will |
+ make this option enabled by default. |
+ |
+ To actually take advantage of arena allocation, you need to use the arena |
+ APIs when creating messages. A quick example of using the arena API: |
+ |
+ { |
+ google::protobuf::Arena arena; |
+ // Allocate a protobuf message in the arena. |
+ MyMessage* message = Arena::CreateMessage<MyMessage>(&arena); |
+ // All submessages will be allocated in the same arena. |
+ if (!message->ParseFromString(data)) { |
+ // Deal with malformed input data. |
+ } |
+ // Must not delete the message here. It will be deleted automatically |
+ // when the arena is destroyed. |
+ } |
+ |
+ Currently arena does not work with map fields. Enabling arena in a .proto |
+ file containing map fields will result in compile errors in the generated |
+ code. This will be addressed in a future release. |
+ |
+2014-10-20 version 2.6.1: |
+ |
+ C++ |
+ * Added atomicops support for Solaris. |
+ * Released memory allocated by InitializeDefaultRepeatedFields() and |
+ GetEmptyString(). Some memory sanitizers reported them as memory leaks. |
+ |
+ Java |
+ * Updated DynamicMessage.setField() to handle repeated enum values |
+ correctly. |
+ * Fixed a bug that caused NullPointerException to be thrown when |
+ converting manually constructed FileDescriptorProto to |
+ FileDescriptor. |
+ |
+ Python |
+ * Fixed WhichOneof() to work with de-serialized protobuf messages. |
+ * Fixed a missing file problem of Python C++ implementation. |
+ |
+2014-08-15 version 2.6.0: |
+ |
+ General |
+ * Added oneofs(unions) feature. Fields in the same oneof will share |
+ memory and at most one field can be set at the same time. Use the |
+ oneof keyword to define a oneof like: |
+ message SampleMessage { |
+ oneof test_oneof { |
+ string name = 4; |
+ YourMessage sub_message = 9; |
+ } |
+ } |
+ * Files, services, enums, messages, methods and enum values can be marked |
+ as deprecated now. |
+ * Added Support for list values, including lists of mesaages, when |
+ parsing text-formatted protos in C++ and Java. |
+ For example: foo: [1, 2, 3] |
+ |
+ C++ |
+ * Enhanced customization on TestFormat printing. |
+ * Added SwapFields() in reflection API to swap a subset of fields. |
+ Added SetAllocatedMessage() in reflection API. |
+ * Repeated primitive extensions are now packable. The |
+ [packed=true] option only affects serializers. Therefore, it is |
+ possible to switch a repeated extension field to packed format |
+ without breaking backwards-compatibility. |
+ * Various speed optimizations. |
+ |
+ Java |
+ * writeTo() method in ByteString can now write a substring to an |
+ output stream. Added endWith() method for ByteString. |
+ * ByteString and ByteBuffer are now supported in CodedInputStream |
+ and CodedOutputStream. |
+ * java_generate_equals_and_hash can now be used with the LITE_RUNTIME. |
+ |
+ Python |
+ * A new C++-backed extension module (aka "cpp api v2") that replaces the |
+ old ("cpp api v1") one. Much faster than the pure Python code. This one |
+ resolves many bugs and is recommended for general use over the |
+ pure Python when possible. |
+ * Descriptors now have enum_types_by_name and extension_types_by_name dict |
+ attributes. |
+ * Support for Python 3. |
+ |
+2013-02-27 version 2.5.0: |
General |
* New notion "import public" that allows a proto file to forward the content |
@@ -17,6 +532,9 @@ |
be assigned the same numeric value. Default value is "true". Setting it to |
false causes the compiler to reject enum definitions where multiple symbols |
have the same numeric value. |
+ Note: We plan to flip the default value to "false" in a future release. |
+ Projects using enum aliases should set the option to "true" in their .proto |
+ files. |
C++ |
* New generated method set_allocated_foo(Type* foo) for message and string |
@@ -32,7 +550,7 @@ |
comments for corresponding classes and data members. |
* Added Parser to parse directly into messages without a Builder. For |
example, |
- Foo foo = Foo.getParser().ParseFrom(input); |
+ Foo foo = Foo.PARSER.ParseFrom(input); |
Using Parser is ~25% faster than using Builder to parse messages. |
* Added getters/setters to access the underlying ByteString of a string field |
directly. |