Skip to content

Protocol Buffers v3.5.0

Compare
Choose a tag to compare
@liujisi liujisi released this 13 Nov 19:59
· 95 commits to 3.5.x since this release
2761122

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.