Jun 8, 2018
Protocol Buffers v3.6.0.1

@acozzette acozzette released this Jun 19, 2018 · 55 commits to 3.6.x since this release

Assets 26

General

C++

  • Starting from this release, we now require C++11. For those we cannot yet upgrade to C++11, we will try to keep the 3.5.x branch updated with critical bug fixes only. If you have any concerns about this, please comment on issue #2780.
  • Moved to C++11 types like std::atomic and std::unique_ptr and away from our old custom-built equivalents.
  • Added support for repeated message fields in lite protos using implicit weak fields. This is an experimental feature that allows the linker to strip out more unused messages than previously was possible.
  • Fixed SourceCodeInfo for interpreted options and extension range options.
  • Fixed always_print_enums_as_ints option for JSON serialization.
  • Added support for ignoring unknown enum values when parsing JSON.
  • Create std::string in Arena memory.
  • Fixed ValidateDateTime to correctly check the day.
  • Fixed bug in ZeroCopyStreamByteSink.
  • Various other cleanups and fixes.

Java

  • Dropped support for Java 6.
  • Added a UTF-8 decoder that uses Unsafe to directly decode a byte buffer.
  • Added deprecation annotations to generated code for deprecated oneof fields.
  • Fixed map field serialization in DynamicMessage.
  • Cleanup and documentation for Java Lite runtime.
  • Various other fixes and cleanups
  • Fixed unboxed arraylists to handle an edge case
  • Improved performance for copying between unboxed arraylists
  • Fixed lite protobuf to avoid Java compiler warnings
  • Improved test coverage for lite runtime
  • Performance improvements for lite runtime

Python

  • Fixed bytes/string map key incompatibility between C++ and pure-Python implementations (issue #4029)
  • Added __init__.py files to compiler and util subpackages
  • Use /MT for all Windows versions
  • Fixed an issue affecting the Python-C++ implementation when used with Cython (issue #2896)
  • Various text format fixes
  • Various fixes to resolve behavior differences between the pure-Python and Python-C++ implementations

PHP

  • Added php_metadata_namespace to control the file path of generated metadata file.
  • Changed generated classes of nested message/enum. E.g., Foo.Bar, which previously generates Foo_Bar, now generates Foo/Bar
  • Added array constructor. When creating a message, users can pass a php array whose content is field name to value pairs into constructor. The created message will be initialized according to the array. Note that message field should use a message value instead of a sub-array.
  • Various bug fixes.

Objective-C

  • We removed some helper class methods from GPBDictionary to shrink the size of the library, the functionary is still there, but you may need to do some specific +alloc / -init… methods instead.
  • Minor improvements in the performance of object field getters/setters by avoiding some memory management overhead.
  • Fix a memory leak during the raising of some errors.
  • Make header importing completely order independent.
  • Small code improvements for things the undefined behaviors compiler option was flagging.

Ruby

  • Added ruby_package file option to control the module of generated class.
  • Various bug fixes.

Javascript

  • Allow setting string to int64 field.

Csharp

  • Unknown fields are now parsed and then sent back on the wire. They can be discarded at parse time via a CodedInputStream option.
  • Movement towards working with .NET 3.5 and Unity
  • Expression trees are no longer used
  • AOT generics issues in Unity/il2cpp have a workaround (see commit 1b219a1 for details)
  • Floating point values are now compared bitwise (affects NaN value comparisons)
  • The default size limit when parsing is now 2GB rather than 64MB
  • MessageParser now supports parsing from a slice of a byte array
  • JSON list parsing now accepts null values where the underlying proto representation does

@liujisi liujisi released this Dec 20, 2017 · 27 commits to 3.5.x since this release

Assets 26

Planned Future Changes

  • Make C++ implementation C++11 only: we plan to require C++11 to build protobuf code starting from 3.6.0 release, after unknown fields semantic changes are finished. Please join this github issue to provide your feedback.

protoc

  • Fixed a bug introduced in 3.5.0 and protoc in Windows now accepts non-ascii characters in paths again.

C++

  • Removed several usages of C++11 features in the code base.
  • Fixed some compiler warnings.

PHP

  • Fixed memory leak in C-extension implementation.
  • Added discardUnknokwnFields API.
  • Removed duplicatd typedef in C-extension headers.
  • Avoided calling private php methods (timelib_update_ts).
  • Fixed Any.php to use fully-qualified name for DescriptorPool.

Ruby

  • Added Google_Protobuf_discard_unknown for discarding unknown fields in
    messages.

C#

  • Unknown fields are now preserved by default.
  • Floating point values are now bitwise compared, affecting message equality check and Contains() API in map and repeated fields.
Dec 6, 2017
Add release log

@liujisi liujisi released this Nov 13, 2017 · 93 commits to 3.5.x since this release

Assets 26

Planned Future Changes

  • Make C++ implementation C++11 only: we plan to require C++11 to build protobuf code starting from 3.5.0 or 3.6.0 release, after unknown fields semantic changes are finished. Please join this github issue to provide your feedback.

General

  • Unknown fields are now preserved in proto3 for most of the language implementations for proto3 by default. See the per-language section for details.
  • reserve keyword are now supported in enums

C++

  • Proto3 messages are now preserving unknown fields by default. If you rely on unknowns fields being dropped. Please use DiscardUnknownFields() explicitly.
  • Deprecated the unsafe_arena_release_* and unsafe_arena_add_allocated_* methods for string fields.
  • Added move constructor and move assignment to RepeatedField, RepeatedPtrField and google::protobuf::Any.
  • Added perfect forwarding in Arena::CreateMessage
  • In-progress experimental support for implicit weak fields with lite protos. This feature allows the linker to strip out more unused messages and reduce binary size.
  • Various performance optimizations.

Java

  • Proto3 messages are now preserving unknown fields by default. If you’d like to drop unknown fields, please use the DiscardUnknownFieldsParser API. For example:
      Parser<Foo> parser = DiscardUnknownFieldsParser.wrap(Foo.parser());
      Foo foo = parser.parseFrom(input);
  • Added a new CodedInputStream decoder for Iterable<ByteBuffer> with direct ByteBuffers.
  • TextFormat now prints unknown length-delimited fields as messages if possible.
  • FieldMaskUtil.merge() no longer creates unnecessary empty messages when a message field is unset in both source message and destination message.
  • Various performance optimizations.

Python

  • Proto3 messages are now preserving unknown fields by default. Use message.DiscardUnknownFields() to drop unknown fields.
  • Add FieldDescriptor.file in generated code.
  • Add descriptor pool FindOneofByName in pure python.
  • Change unknown enum values into unknown field set .
  • Add more Python dict/list compatibility for Struct/ListValue.
  • Add utf-8 support for text_format.Merge()/Parse().
  • Support numeric unknown enum values for proto3 JSON format.
  • Add warning for Unexpected end-group tag in cpp extension.

PHP

  • Proto3 messages are now preserving unknown fields.
  • Provide well known type messages in runtime.
  • Add prefix ‘PB’ to generated class of reserved names.
  • Fixed all conformance tests for encode/decode json in php runtime. C extension needs more work.

Objective-C

  • Fixed some issues around copying of messages with unknown fields and then mutating the unknown fields in the copy.

C#

  • Added unknown field support in JsonParser.
  • Fixed oneof message field merge.
  • Simplify parsing messages from array slices.

Ruby

  • Unknown fields are now preserved by default.
  • Fixed several bugs for segment fault.

Javascript

  • Decoder can handle both paced and unpacked data no matter how the proto is defined.
  • Decoder now accept long varint for 32 bit integers.