Releases: protocolbuffers/protobuf
Releases · protocolbuffers/protobuf
Protocol Buffers v23.0-rc2
Announcements
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
C++
- Fixes Clang 6 linker bug (49bb3f2)
General
- Replace previous breaking changes in 23.0-rc1 with deprecation warnings. (db1d3f8)
Protocol Buffers v23.0-rc1 (Incomplete)
Announcements
- This RC was abandoned before artifact publishing due to unintended breaking changes:
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Compiler
- Implement a retain_options flag in protoc. (83507c7)
- Make protoc --descriptor_set_out respect option retention (ae2531d)
- Modify release artifacts for protoc to statically link system libraries. (723bd4c)
- Extension declaration: Enforce that if the extension range has a declaration then all extensions in that range must be declared. This should prevent non-declared extensions from being added. (5dc171f)
- Implement "reserved" for extension declaration. (41287bd)
- Open-source extension declaration definition. (145900f)
C++
- Breaking change: lock down visibility for FileDescriptor syntax APIs. (8b1be51)
- Remove PROTOBUF_DEPRECATED in favor of [[deprecated]]. (5c59290)
- Add
assert
to the list of keywords for C++. (a75c1a2) - Added Reflection::GetCord() method in C++ (6ecb5d0)
- Support C++ protobuf ctype=CORD for bytes field (generated code). (714f975)
- Expand LazySerializerEmitter to cover proto3 cases. (fab7f92)
- Unconditionally generate unknown field accessors. (dd8a3cf)
- Introduce proto filter for inject_field_listener_events. (2dc5338)
- Add ParseFromCord to TextFormat (055a6c6)
- Mark proto2::Arena::GetArena as deprecated. (9f95958)
Java
- Adds
Timestamps.now()
. (295f112) - Breaking change: Lock down visibility for FileDescriptor.getSyntax(). (8c8b2be)
- Added Reflection::GetCord() method in C++ (6ecb5d0)
- Re-attach OSGI headers to lite,core, and util. This information was dropped in the move from maven to bazel. (4b5652b)
- Add Java FileDescriptor.copyHeadingTo() which copies file-level settings (e.g. syntax, package, file options) to FileDescriptorProto.Builder (6e6d0bc)
- Remove unnecessary has bits from proto2 Java. (c440da9)
- Add casts to make protobuf compatible with Java 1.8 runtime. (d40aadf)
- Fix mutability bug in Java proto lite: sub-messages inside of oneofs were not (fa82155)
- Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (1de344f)
Kotlin
- Remove errorprone dependency from kotlin protos. (7b6e828)
Csharp
- Make json_name take priority over name (fully) in C# parsing (#12262) (4326e0f)
- Add C# presence methods to proto3 oneof fields. (affadac)
Objective-C
- Enforce the max message size when serializing to binary form. (e6d01b2)
- mark mergeFromData:extensionRegistry: as deprecated. (e3b0051)
Python
- Make numpy/pip_deps a test-only dependency. (fe038fc)
- Mark sequence containers as Py_TPFLAGS_SEQUENCE, enabling pattern matching (a05c57d)
- Fix Python bug with required fields (579f4ab)
- Mark deprecated SupportsUnknownEnumValues on Message reflection. Use FieldDescriptor or EnumDescriptor instead. (0b9134b)
- Raise warnings for MessageFactory class usages (dd9dd86)
- Add Python support for retention attribute (63389c0)
- Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (1de344f)
Python C-Extension (Default)
- Fix Python bug with required fields (protocolbuffers/upb@ea4cb79)
- See also UPB changes below, which may affect Python C-Extension (Default).
PHP
PHP C-Extension
- RepeatedField: unset by index (#11425) (363fa89)
- See also UPB changes below, which may affect PHP C-Extension.
Ruby
- Change the Ruby code generator to emit a serialized proto instead of the DSL (#12319) (bd52d04)
- Breaking change: Lock down visibility for FileDescriptor.getSyntax(). (8c8b2be)
- Feat(6178): emit ruby enum as integer (#11673) (8aa2b17)
Ruby C-Extension
- Feat(6178): emit ruby enum as integer (#11673) (8aa2b17)
- Ruby: Implement Write Barriers (#11793) (d82d8a4)
- See also UPB changes below, which may affect Ruby C-Extension.
UPB (Python/PHP/Ruby C-Extension)
- Implements upb_Message_DeepClone. (protocolbuffers/upb@3286f94)
Other
- Fix btree issue in map tests. (9898418)
- Fix declared dependencies for pkg-config (#12518) (f79e35c)
- Fix build for newlib (#12501) (945bf3c)
- Update usage disclaimer on FieldOptions.ctype (b8e7192)
- Add config option to print 64-bit integers in JSON as unquoted ints if they can be losslessly converted into a 64-bit float. (330e10d)
- Version protoc according to the compiler version number. (e67136d)
- Fix shared object ABI exports (#5144) (#11032) (462964e)
- Ensure VarintParseSlowArm{32,64} are exported with PROTOBUF_EXPORT (2ce5639)
- Update the min required CMake version to 3.10 (bcb20bb)
Protocol Buffers v22.3
Announcements
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
UPB (Python/PHP/Ruby C-Extension)
- Remove src prefix from proto import (protocolbuffers/upb@e05f22a)
Other
Protocol Buffers v22.2
Announcements
- This release was only published for Java and Ruby.
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Java
- Add version to intra proto dependencies and add kotlin stdlib dependency (99ed010)
- Add $ back for osgi header (d80c12d)
- Remove $ in pom files (8ac2337)
Kotlin
Protocol Buffers v22.1
Announcements
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Compiler
- Modify release artifacts for protoc to statically link system libraries. (8ad6cdd)
- Add visibility of plugin.proto to python directory (620d21a)
- Strip "src" from file name of plugin.proto (9c89a70)
Java
- Add OSGi headers to pom files. (e909bfc)
Kotlin
- Remove errorprone dependency from kotlin protos. (66f80c3)
Other
- Version protoc according to the compiler version number. (b143586)
Protocol Buffers v22.0
Announcements
-
This version includes breaking changes to: Cpp.
- [Cpp] Migrate to Abseil's logging library. (a9f1ea6)
- [Cpp]
proto2::Map::value_type
changes tostd::pair<const K, V>
. (46656ed) - [Cpp] Mark final ZeroCopyInputStream, ZeroCopyOutputStream, and DefaultFieldComparator classes. (bf9c22e)
- [Cpp] Add a dependency on Abseil (#10416)
- [Cpp] Remove all autotools usage (#10132)
- [Cpp] Add C++20 reserved keywords
- [Cpp] Dropped C++11 Support
- [Cpp] Delete Arena::Init
- [Cpp] Replace JSON parser with new implementation
- [Cpp] Make RepeatedField::GetArena non-const in order to support split RepeatedFields.
-
You can refer to our migration guide for details on what C++ code changes will be necessary to be compatible with 22.0.
-
Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Compiler
- Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
- Add debug_redact field option to protobuf. (9238c48)
- Protoc: accept capital X to indicate hex escape in string literals (#10757)
- Gracefully handle weird placement of linebreaks around comments (#10660)
- Open up visibility for some compiler internals (#10608)
- Protoc: validate reserved names are identifiers (#10586)
- Protoc: validate custom json_name configuration (#10581)
- Protoc: fix consistency with parsing very large decimal numbers (#10555)
- Use protoc version for --version (#10386)
- Fix for grpc.tools #17995 & protobuf #7474 (handle UTF-8 paths in argumentfile) (#10200)
- Print full path name of source .proto file on error
- Include proto message type in the annotation comments.
- Maven artifact suffix format has changed to -RCN instead of -rc-N
C++
- Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (a594141)
- Add C++ support for retention attribute (8f882e7)
- Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
- No longer define no_threadlocal on OpenBSD (#10610)
- CMake: Enable projects to set the C++ version (#10464)
- Breaking Change: Add a dependency on Abseil (#10416)
- Upgrade third_party/googletest submodule to current main branch (#10393)
- Breaking Change: Remove all autotools usage (#10132)
- CMake: use add_compile_options instead of add_definitions for compile options (#10293)
- Fix #9947: make the ABI identical between debug and non-debug builds (#10271)
- Allow for CMAKE_INSTALL_LIBDIR to be absolute (#10090)
- Add header search paths to protobuf-c++ spec (#10024)
- Cpp_generated_lib_linked support is removed in protoc
- Reduced .pb.o object file size slightly by explicitly instantiating
- Breaking Change: Add C++20 reserved keywords.
- Breaking Change: Dropped C++11 Support
- Fixed crash in ThreadLocalStorage for pre-C++17 compilers on 32-bit ARM.
- Clarified that JSON API non-OK statuses are not a stable API.
- Added a default implementation of MessageDifferencer::Reporter methods.
- Proto2::MapPair is now an alias to std::pair.
- Hide C++ RepeatedField::UnsafeArenaSwap
- Use table-driven parser for reflection based objects.
- Add ARM-optimized Varint decoding functions.
- Minor optimization for parsing groups
- Declare ReflectiveProtoHook class
- Reduce size of VarintParse code in protocol buffers, by calling the shared
- Avoid inlining some large heavily duplicated routines in repeated_ptr_field.h
- Add ReflectiveProtoHook to Reflection.
- Turns on table-driven parser for reflection based objects.
- Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
- Undefine the macro
linux
when compiling protobuf - Reduce memory consumption of MessageSet parsing.
- Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
- Breaking Change: Delete Arena::Init
- Make a PROTOBUF_POISON/UNPOISON to reduce noise in the source
- Put alignment functions in "arena_align.h"
- Split off
cleanup
arena functions into "arena_cleanup.h" - Fix signed / unsigned match in CHECK_EQ
- Kill Atomic<>. it's not pulling it's weight
- Move AllocationPolicy out of arena_impl, and unify arena_config for bazel
- Fix failure case in table-driven parser.
- Breaking Change: Replace JSON parser with new implementation
- Introduce the Printer::{SetRedactDebugString,SetRandomizeDebugString} private flags.
- Introduce global flags to control Printer::{SetRedactDebugString, SetRandomizeDebugString}.
- Proto3 string fields no longer trigger clang-tidy warning bugprone-branch-clone.
- Fix the API of DescriptorUpgrader::set_allow_unknown_dependencies to set to True always, and to populate into the DescriptorPool as well.
- Report line numbers consistently in text-format deprecated-field warnings.
- Fixed C++ code generation for protos that use int32_t, uint32_t, int64_t, uint64_t, size_t as field names.
- Annotate generated C++ public aliases for enum types.
- Change default arena max block size from 8K to 32K.
- Begin emitting semantic metadata for some C++ proto features. (2880fef)
Java
- Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (a594141)
- Use LazyStringArrayList directly in gencode. (e6dd59e)
- Add Java support for retention attribute (1325913)
- Expect fail when serialize inf and nan for Value.number_value in json format. fixes #11259 (ca1cb1b)
- Create a helper function that can make a mutable copy of any ProtobufList (5669606)
- Add debug_redact field option to protobuf. (9238c48)
- Remove unused package private class ProtobufLists. (b51c551)
- Mark UnmodifiableLazyStringList deprecated. UnmodifiableLazyStringList is unnecessary and will be removed in a future release. (9595cbb)
- Make emptyList public and mark the public EMPTY field as deprecated. (c658e27)
- Enable Text format parser to skip unknown short-formed repeated fields. (6dbd413)
- Expose internal setExtension method for Kotlin (33d1070)
- Mark default instance as immutable first to avoid race during static initialization of default instances. (#10770)
- Add serialVersionUID to ByteString and subclasses (#10718)
- Fix serialization warnings in generated code when compiling with Java 18 and above (#10561)
- Fix Timestamps fromDate for negative 'exact second' java.sql.Timestamps (#10321)
- Fix Timestamps.fromDate to correctly handle java.sql.Timestamps before unix epoch (#10126)
- Performance improvement for repeated use of FieldMaskUtil#merge by caching
- Optimized Java proto serialization gencode for protos having many extension ranges with few fields in between.
- More thoroughly annotate public generated code in Java lite protocol buffers.
- Fixed Bug in proto3 java lite repeated enum fields. Failed to call copyOnWrite before modifying previously built message. Causes modification to already "built" messages that should be immutable.
- Fix Java reflection serialization of empty packed fields.
- Refactoring java full runtime to reuse sub-message builders and prepare to migrate parsing logic from parse constructor to builder.
- Move proto wireformat parsing functionality from the private "parsing constructor" to the Builder class.
- Change the Lite runtime to prefer merging from the wireformat into mutable messages rather than building up a new immutable object before merging. This way results in fewer allocations and copy operations.
- Make message-type extensions merge from wire-format instead of building up instances and merging afterwards. This has much better performance.
- Fix TextFormat parser to build up recurring (but supposedly not repeated) sub-messages directly from text rather than building a new sub-message and merging the fully formed message into the existing field.
- Fix bug in nested builder caching logic where cleared sub-field builders would remain dirty after a clear and build in a parent layer. #10624
- Add exemplar variants of the Java Any.is() and Any.unpack() methods. (60b7149...
Protocol Buffers v22.0-rc3
Announcements
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
C++
- Add C++ support for retention attribute (8f882e7)
Java
- Use LazyStringArrayList directly in gencode. (e6dd59e)
- Add Java support for retention attribute (1325913)
Objective-C
- [ObjC] Mark classes that shouldn't be subclassed as such. (a185a6e)
Ruby
Ruby C-Extension
- For Ruby oneof fields, generate hazzers for members (#11655) (d1a3c6d)
- See also UPB changes below, which may affect Ruby C-Extension.
UPB (Python/PHP/Ruby C-Extension)
- Ensure that extensions respect deterministic serialization. (protocolbuffers/upb@57a79de)
- Add ExtensionRegistry version of Parse to message templates. (protocolbuffers/upb@28de62f)
- Fix Upb PromotoUnknownToMessage for OneOf fields. (protocolbuffers/upb@10e57c0)
- Implement UPB OneOf MiniTable apis. (protocolbuffers/upb@067dfea)
- Remove reflection dependency for UPB compare utility. (protocolbuffers/upb@84a3fd2)
Other
- Remove unused headers, include missing headers, match args, etc. (21a6a26)
- Add a non-const overload of RepeatedPtrField::GetArena and deprecate the const overload. (4bf33da)
- Optimize Varint Parsing for 32 and 64 bits (ac76ae9)
- Fix reflection based parser for map entries with closed enum values. (55d2123)
Protocol Buffers v22.0-rc2
Announcements
- This rc release mainly includes release process fixes since previous -rc1.
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Ruby
- Downgrade ruby major version (8ce6ad2)
Protocol Buffers v22.0-rc1 (Incomplete)
Announcements
- This RC was only published for Java, Protoc, and Cocoapods.
- This version includes breaking changes to: Cpp, Ruby.
- [Cpp] Migrate to Abseil's logging library. (a9f1ea6)
- [Cpp]
proto2::Map::value_type
changes tostd::pair<const K, V>
. (46656ed) - [Cpp] Mark final ZeroCopyInputStream, ZeroCopyOutputStream, and DefaultFieldComparator classes. (bf9c22e)
- [Cpp] Add a dependency on Abseil (#10416)
- [Cpp] Remove all autotools usage (#10132)
- [Cpp] Add C++20 reserved keywords
- [Cpp] Delete Arena::Init
- [Cpp] Replace JSON parser with new implementation
- [Cpp] Make RepeatedField::GetArena non-const in order to support split RepeatedFields.
- [Ruby] Switch to releasing ruby source gems only.
- Protobuf News may include additional announcements or pre-announcements for upcoming changes.
Compiler
- Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
- Add debug_redact field option to protobuf. (9238c48)
- Protoc: accept capital X to indicate hex escape in string literals (#10757)
- Gracefully handle weird placement of linebreaks around comments (#10660)
- Open up visibility for some compiler internals (#10608)
- Protoc: validate reserved names are identifiers (#10586)
- Protoc: validate custom json_name configuration (#10581)
- Protoc: fix consistency with parsing very large decimal numbers (#10555)
- Use protoc version for --version (#10386)
- Fix for grpc.tools #17995 & protobuf #7474 (handle UTF-8 paths in argumentfile) (#10200)
- Print full path name of source .proto file on error
- Include proto message type in the annotation comments.
- Maven artifact suffix format has changed to -RCN instead of -rc-N
C++
- Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
- No longer define no_threadlocal on OpenBSD (#10610)
- CMake: Enable projects to set the C++ version (#10464)
- Breaking Change: Add a dependency on Abseil (#10416)
- Upgrade third_party/googletest submodule to current main branch (#10393)
- Breaking Change: Remove all autotools usage (#10132)
- CMake: use add_compile_options instead of add_definitions for compile options (#10293)
- Fix #9947: make the ABI identical between debug and non-debug builds (#10271)
- Allow for CMAKE_INSTALL_LIBDIR to be absolute (#10090)
- Add header search paths to protobuf-c++ spec (#10024)
- Cpp_generated_lib_linked support is removed in protoc
- Reduced .pb.o object file size slightly by explicitly instantiating
- Breaking Change: Add C++20 reserved keywords.
- Fixed crash in ThreadLocalStorage for pre-C++17 compilers on 32-bit ARM.
- Clarified that JSON API non-OK statuses are not a stable API.
- Added a default implementation of MessageDifferencer::Reporter methods.
- Proto2::MapPair is now an alias to std::pair.
- Hide C++ RepeatedField::UnsafeArenaSwap
- Use table-driven parser for reflection based objects.
- Add ARM-optimized Varint decoding functions.
- Minor optimization for parsing groups
- Declare ReflectiveProtoHook class
- Reduce size of VarintParse code in protocol buffers, by calling the shared
- Avoid inlining some large heavily duplicated routines in repeated_ptr_field.h
- Add ReflectiveProtoHook to Reflection.
- Turns on table-driven parser for reflection based objects.
- Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
- Undefine the macro
linux
when compiling protobuf - Reduce memory consumption of MessageSet parsing.
- Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
- Breaking Change: Delete Arena::Init
- Make a PROTOBUF_POISON/UNPOISON to reduce noise in the source
- Put alignment functions in "arena_align.h"
- Split off
cleanup
arena functions into "arena_cleanup.h" - Fix signed / unsigned match in CHECK_EQ
- Kill Atomic<>. it's not pulling it's weight
- Move AllocationPolicy out of arena_impl, and unify arena_config for bazel
- Fix failure case in table-driven parser.
- Breaking Change: Replace JSON parser with new implementation
- Introduce the Printer::{SetRedactDebugString,SetRandomizeDebugString} private flags.
- Introduce global flags to control Printer::{SetRedactDebugString, SetRandomizeDebugString}.
- Proto3 string fields no longer trigger clang-tidy warning bugprone-branch-clone.
- Fix the API of DescriptorUpgrader::set_allow_unknown_dependencies to set to True always, and to populate into the DescriptorPool as well.
- Report line numbers consistently in text-format deprecated-field warnings.
- Fixed C++ code generation for protos that use int32_t, uint32_t, int64_t, uint64_t, size_t as field names.
- Annotate generated C++ public aliases for enum types.
- Change default arena max block size from 8K to 32K.
- Begin emitting semantic metadata for some C++ proto features. (2880fef)
Java
- Expect fail when serialize inf and nan for Value.number_value in json format. fixes #11259 (ca1cb1b)
- Create a helper function that can make a mutable copy of any ProtobufList (5669606)
- Add debug_redact field option to protobuf. (9238c48)
- Remove unused package private class ProtobufLists. (b51c551)
- Mark UnmodifiableLazyStringList deprecated. UnmodifiableLazyStringList is unnecessary and will be removed in a future release. (9595cbb)
- Make emptyList public and mark the public EMPTY field as deprecated. (c658e27)
- Enable Text format parser to skip unknown short-formed repeated fields. (6dbd413)
- Expose internal setExtension method for Kotlin (33d1070)
- Mark default instance as immutable first to avoid race during static initialization of default instances. (#10770)
- Add serialVersionUID to ByteString and subclasses (#10718)
- Fix serialization warnings in generated code when compiling with Java 18 and above (#10561)
- Fix Timestamps fromDate for negative 'exact second' java.sql.Timestamps (#10321)
- Fix Timestamps.fromDate to correctly handle java.sql.Timestamps before unix epoch (#10126)
- Performance improvement for repeated use of FieldMaskUtil#merge by caching
- Optimized Java proto serialization gencode for protos having many extension ranges with few fields in between.
- More thoroughly annotate public generated code in Java lite protocol buffers.
- Fixed Bug in proto3 java lite repeated enum fields. Failed to call copyOnWrite before modifying previously built message. Causes modification to already "built" messages that should be immutable.
- Fix Java reflection serialization of empty packed fields.
- Refactoring java full runtime to reuse sub-message builders and prepare to migrate parsing logic from parse constructor to builder.
- Move proto wireformat parsing functionality from the private "parsing constructor" to the Builder class.
- Change the Lite runtime to prefer merging from the wireformat into mutable messages rather than building up a new immutable object before merging. This way results in fewer allocations and copy operations.
- Make message-type extensions merge from wire-format instead of building up instances and merging afterwards. This has much better performance.
- Fix TextFormat parser to build up recurring (but supposedly not repeated) sub-messages directly from text rather than building a new sub-message and merging the fully formed message into the existing field.
- Fix bug in nested builder caching logic where cleared sub-field builders would remain dirty after a clear and build in a parent layer. #10624
- Add exemplar variants of the Java Any.is() and Any.unpack() methods. (60b7149)
- Use bit-field int values in buildPartial to skip work on unset groups of fields. (2326aef)
- Maven artifact suffix format has changed to -RCN instead of -rc-N
Kotlin
- Add debug_redact field option to protobuf. (9238c48)
- Expose internal setExtension method for Kotlin (33d1070)
- Add missing
public
modifier to Kotlin generated code (#10616) - Add "public" modifier to Kotlin generated code (#10599)
- Update rules_kotlin version (#10212)
- Suppress deprecation warnings in Kotlin generated code.
- Kotlin generated code comments now use kdoc format instead of javadoc.
- Escape keywords in package names in proto generated code
- Add Kotlin enum int value getters and se...