| Index: third_party/protobuf/CHANGES.txt
|
| diff --git a/third_party/protobuf/CHANGES.txt b/third_party/protobuf/CHANGES.txt
|
| index 846d735e6cda4f9c0aac77f3412bf92f3913be9e..a21e956c357e6171bc8a195e2d42b1c5c5b0f4dc 100644
|
| --- a/third_party/protobuf/CHANGES.txt
|
| +++ b/third_party/protobuf/CHANGES.txt
|
| @@ -1,352 +1,4 @@
|
| -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:
|
| +2012-09-19 version 2.5.0:
|
|
|
| General
|
| * New notion "import public" that allows a proto file to forward the content
|
| @@ -365,9 +17,6 @@
|
| 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
|
| @@ -383,7 +32,7 @@
|
| comments for corresponding classes and data members.
|
| * Added Parser to parse directly into messages without a Builder. For
|
| example,
|
| - Foo foo = Foo.PARSER.ParseFrom(input);
|
| + Foo foo = Foo.getParser().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.
|
|
|