Skip to content

Protocol Buffers v3.6.0

Compare
Choose a tag to compare
@acozzette acozzette released this 19 Jun 17:57
· 67 commits to 3.6.x since this release
ab8edf1

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