Releases: protocolbuffers/protobuf
Releases · protocolbuffers/protobuf
Protocol Buffers v3.12.2
Protocol Buffers v3.12.1
Protocol Buffers v3.12.0
Protocol Compiler
- [experimental] Singular, non-message typed fields in proto3 now support
presence tracking. This is enabled by adding the "optional" field label and
passing the--experimental_allow_proto3_optional
flag to protoc.- For usage info, see docs/field_presence.md.
- During this experimental phase, code generators should update to support
proto3 presence, see docs/implementing_proto3_presence.md for instructions.
- Allow duplicate symbol names when multiple descriptor sets are passed on
the command-line, to match the behavior when multiple .proto files are passed. - Deterministic
protoc --descriptor_set_out
(#7175)
C++
- [experimental] Added proto3 presence support.
- New descriptor APIs to support proto3 presence.
- Fix for #7463 in -rc1 (core dump mixing optional and singular fields in proto3)
- Enable Arenas by default on all .proto files.
- Documented that users are not allowed to subclass Message or MessageLite.
- Mark generated classes as final; inheriting from protos is strongly discouraged.
- Add stack overflow protection for text format with unknown fields.
- Add accessors for map key and value FieldDescriptors.
- Add FieldMaskUtil::FromFieldNumbers().
- MessageDifferencer: use ParsePartial() on Any fields so the diff does not
fail when there are missing required fields. - ReflectionOps::Merge(): lookup messages in the right factory, if it can.
- Added Descriptor::WellKnownTypes enum and Descriptor::well_known_type()
accessor as an easier way of determining if a message is a Well-Known Type. - Optimized RepeatedField::Add() when it is used in a loop.
- Made proto move/swap more efficient.
- De-virtualize the GetArena() method in MessageLite.
- Improves performance of json_stream_parser.cc by factor 1000 (#7230)
- bug: #7076 undefine Windows OUT and OPTIONAL macros (#7087)
- Fixed a bug in FieldDescriptor::DebugString() that would erroneously print
an "optional" label for a field in a oneof. - Fix bug in parsing bool extensions that assumed they are always 1 byte.
- Fix off-by-one error in FieldOptions::ByteSize() when extensions are present.
- Clarified the comments to show an example of the difference between
Descriptor::extension and DescriptorPool::FindAllExtensions. - Add a compiler option 'code_size' to force optimize_for=code_size on all
protos where this is possible.
Java
- [experimental] Added proto3 presence support.
- Fix for #7480 in -rc1 ("TextFormat and JsonFormat ignore experimental proto3 optional enums")
- Fix for #7505 in -rc1 (" toString() returns incorrect ascii when there are duplicate keys in a map")
- Mark java enum _VALUE constants as @deprecated if the enum field is deprecated
- reduce size for enums with allow_alias set to true.
- Sort map fields alphabetically by the field's key when printing textproto.
- TextFormat.merge() handles Any as top level type.
- Throw a descriptive IllegalArgumentException when calling
getValueDescriptor() on enum special value UNRECOGNIZED instead of
ArrayIndexOutOfBoundsException. - Fixed an issue with JsonFormat.printer() where setting printingEnumsAsInts()
would override the configuration passed into includingDefaultValueFields(). - Implement overrides of indexOf() and contains() on primitive lists returned
for repeated fields to avoid autoboxing the list contents. - Add overload to FieldMaskUtil.fromStringList that accepts a descriptor.
- [bazel] Move Java runtime/toolchains into //java (#7190)
Python
- [experimental] Added proto3 presence support.
- [experimental] fast import protobuf module, only works with cpp generated code linked in.
- Truncate 'float' fields to 4 bytes of precision in setters for pure-Python
implementation (C++ extension was already doing this). - Fixed a memory leak in C++ bindings.
- Added a deprecation warning when code tries to create Descriptor objects
directly. - Fix unintended comparison between bytes and string in descriptor.py.
- Avoid printing excess digits for float fields in TextFormat.
- Remove Python 2.5 syntax compatibility from the proto compiler generated _pb2.py module code.
- Drop 3.3, 3.4 and use single version docker images for all python tests (#7396)
JavaScript
- Fix js message pivot selection (#6813)
PHP
- Persistent Descriptor Pool (#6899)
- Implement lazy loading of php class for proto messages (#6911)
- Correct @return in Any.unpack docblock (#7089)
- Ignore unknown enum value when ignore_unknown specified (#7455)
Ruby
- [experimental] Implemented proto3 presence for Ruby. (#7406)
- Stop building binary gems for ruby <2.5 (#7453)
- Fix for wrappers with a zero value (#7195)
- Fix for JSON serialization of 0/empty-valued wrapper types (#7198)
- Call "Class#new" over rb_class_new_instance in decoding (#7352)
- Build extensions for Ruby 2.7 (#7027)
- assigning 'nil' to submessage should clear the field. (#7397)
C#
- [experimental] Add support for proto3 presence fields in C# (#7382)
- Cleanup various bits of Google.Protobuf (#6674)
- Fix conformance test failures for Google.Protobuf (#6910)
- Fix latest ArgumentException for C# extensions (#6938)
- Remove unnecessary branch from ReadTag (#7289)
- Enforce recursion depth checking for unknown fields (#7132)
- Mark GetOption API as obsolete and expose the "GetOptions()" method
on descriptors instead (#7491) - Remove Has/Clear members for C# message fields in proto2 (#7429)
Objective-C
- [experimental] ObjC Proto3 optional support (#7421)
- Block subclassing of generated classes (#7124)
- Use references to Obj C classes instead of names in descriptors. (#7026)
- Revisit how the WKTs are bundled with ObjC. (#7173)
Other
Protocol Buffers v3.12.0-rc2
Protocol Buffers v3.12.0-rc1
Protocol Compiler
- [experimental] Singular, non-message typed fields in proto3 now support
presence tracking. This is enabled by adding the "optional" field label and
passing the--experimental_allow_proto3_optional
flag to protoc.- For usage info, see docs/field_presence.md.
- During this experimental phase, code generators should update to support
proto3 presence, see docs/implementing_proto3_presence.md for instructions.
- Allow duplicate symbol names when multiple descriptor sets are passed on
the command-line, to match the behavior when multiple .proto files are passed. - Deterministic
protoc --descriptor_set_out
(#7175)
C++
- [experimental] Added proto3 presence support.
- New descriptor APIs to support proto3 presence.
- Enable Arenas by default on all .proto files.
- Documented that users are not allowed to subclass Message or MessageLite.
- Mark generated classes as final; inheriting from protos is strongly discouraged.
- Add stack overflow protection for text format with unknown fields.
- Add accessors for map key and value FieldDescriptors.
- Add FieldMaskUtil::FromFieldNumbers().
- MessageDifferencer: use ParsePartial() on Any fields so the diff does not
fail when there are missing required fields. - ReflectionOps::Merge(): lookup messages in the right factory, if it can.
- Added Descriptor::WellKnownTypes enum and Descriptor::well_known_type()
accessor as an easier way of determining if a message is a Well-Known Type. - Optimized RepeatedField::Add() when it is used in a loop.
- Made proto move/swap more efficient.
- De-virtualize the GetArena() method in MessageLite.
- Improves performance of json_stream_parser.cc by factor 1000 (#7230)
- bug: #7076 undefine Windows OUT and OPTIONAL macros (#7087)
- Fixed a bug in FieldDescriptor::DebugString() that would erroneously print
an "optional" label for a field in a oneof. - Fix bug in parsing bool extensions that assumed they are always 1 byte.
- Fix off-by-one error in FieldOptions::ByteSize() when extensions are present.
- Clarified the comments to show an example of the difference between
Descriptor::extension and DescriptorPool::FindAllExtensions. - Add a compiler option 'code_size' to force optimize_for=code_size on all
protos where this is possible.
Java
- [experimental] Added proto3 presence support.
- Mark java enum _VALUE constants as @deprecated if the enum field is deprecated
- reduce size for enums with allow_alias set to true.
- Sort map fields alphabetically by the field's key when printing textproto.
- TextFormat.merge() handles Any as top level type.
- Throw a descriptive IllegalArgumentException when calling
getValueDescriptor() on enum special value UNRECOGNIZED instead of
ArrayIndexOutOfBoundsException. - Fixed an issue with JsonFormat.printer() where setting printingEnumsAsInts()
would override the configuration passed into includingDefaultValueFields(). - Implement overrides of indexOf() and contains() on primitive lists returned
for repeated fields to avoid autoboxing the list contents. - Add overload to FieldMaskUtil.fromStringList that accepts a descriptor.
- [bazel] Move Java runtime/toolchains into //java (#7190)
Python
- [experimental] Added proto3 presence support.
- [experimental] fast import protobuf module, only works with cpp generated code linked in.
- Truncate 'float' fields to 4 bytes of precision in setters for pure-Python
implementation (C++ extension was already doing this). - Fixed a memory leak in C++ bindings.
- Added a deprecation warning when code tries to create Descriptor objects
directly. - Fix unintended comparison between bytes and string in descriptor.py.
- Avoid printing excess digits for float fields in TextFormat.
- Remove Python 2.5 syntax compatibility from the proto compiler generated _pb2.py module code.
- Drop 3.3, 3.4 and use single version docker images for all python tests (#7396)
JavaScript
- Fix js message pivot selection (#6813)
PHP
- Persistent Descriptor Pool (#6899)
- Implement lazy loading of php class for proto messages (#6911)
- Correct @return in Any.unpack docblock (#7089)
Ruby
- [experimental] Implemented proto3 presence for Ruby. (#7406)
- Stop building binary gems for ruby <2.5 (#7453)
- Fix for wrappers with a zero value (#7195)
- Fix for JSON serialization of 0/empty-valued wrapper types (#7198)
- Call "Class#new" over rb_class_new_instance in decoding (#7352)
- Build extensions for Ruby 2.7 (#7027)
- assigning 'nil' to submessage should clear the field. (#7397)
C#
- [experimental] Add support for proto3 presence fields in C# (#7382)
- Cleanup various bits of Google.Protobuf (#6674)
- Fix conformance test failures for Google.Protobuf (#6910)
- Fix latest ArgumentException for C# extensions (#6938)
- Remove unnecessary branch from ReadTag (#7289)
- Enforce recursion depth checking for unknown fields (#7132)
Objective-C
- [experimental] ObjC Proto3 optional support (#7421)
- Block subclassing of generated classes (#7124)
- Use references to Obj C classes instead of names in descriptors. (#7026)
- Revisit how the WKTs are bundled with ObjC. (#7173)
Other
Protocol Buffers v3.11.4
Protocol Buffers v3.11.3
Protocol Buffers v3.11.2
PHP
- Make c extension portable for php 7.4 (#6968)
Protocol Buffers v3.11.1
PHP
- Extern declare protobuf_globals (#6946)
Protocol Buffers v3.11.0
C++
- Make serialization method naming consistent
- Make proto runtime + generated code free of deprecation warnings
- Moved ShutdownProtobufLibrary() to message_lite.h. For backward compatibility a declaration is still available in stubs/common.h, but users should prefer message_lite.h
- Removed non-namespace macro EXPECT_OK()
- Removed mathlimits.h from stubs in favor of using std::numeric_limits from C++11
- Fixed bug in parser when ending on a group tag
- Add a helper function to UnknownFieldSet to deal with the changing return value of message::unknown_fields()
- Fix incorrect use of string_view iterators
- Support direct pickling of nested messages
- Skip extension tag validation for MessageSet if unknown dependencies are allowed
- Updated deprecation macros to annotate deprecated code (#6612)
- Remove conversion warning in MapEntryFuncs::ByteSizeLong (#6766)
- Revert "Make shared libraries be able to link to MSVC static runtime libraries, so that VC runtime is not required." (#6914)
Java
- Remove the usage of MethodHandle, so that Android users prior to API version 26 can use protobuf-java
- Publish ProGuard config for javalite
- Fix for StrictMode disk read violation in ExtensionRegistryLite
- Include part of the ByteString's content in its toString().
- Include unknown fields when merging proto3 messages in Java lite builders
Python
- Add float_precision option in json format printer
- Optionally print bytes fields as messages in unknown fields, if possible
- FieldPath: fix testing IsSet on root path ''
- Experimental code gen (fast import protobuf module) which only work with cpp generated code linked in
JavaScript
- Remove guard for Symbol iterator for jspb.Map
PHP
- Avoid too much overhead in layout_init (#6716)
- Lazily Create Singular Wrapper Message (#6833)
- Implement lazy loading of php class for proto messages (#6911)
Ruby
- Ruby lazy wrappers optimization (#6797)
C#
- (RepeatedField): Capacity property to resize the internal array (#6530)
- Experimental proto2 support is now officially available (#4642, #5183, #5350, #5936)
- Getting started doc: https://github.com/protocolbuffers/protobuf/blob/master/docs/csharp/proto2.md
- Add length checks to ExtensionCollection (#6759)
- Optimize parsing of some primitive and wrapper types (#6843)
- Use 3 parameter Encoding.GetString for default string values (#6828)
- Change _Extensions property to normal body rather than expression (#6856)
Objective C
- Fixed unaligned reads for 32bit arm with newer Xcode versions (#6678)