| 2022-07-01 Unreleased version |
| # C++ |
| * cpp_generated_lib_linked support is removed in protoc |
| * Reduced .pb.o object file size slightly by explicitly instantiating |
| InternalMetadata templates in the runtime. |
| * Add C++20 keywords guarded by PROTOBUF_FUTURE_CPP20_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. |
| * Update Map's InternalSwap() to take a pointer to the other Map. |
| * 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 |
| routine after handling just one-byte varint encoding inline, rather than |
| handling one-byte and two-byte varints inline. |
| * 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. |
| * Add a new JSON parser. |
| * Removed old JSON parsing code. |
| * 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. |
| * Reserve C++20 keywords |
| * 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. |
| |
| # Kotlin |
| * 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 setters |
| |
| # Java |
| * Performance improvement for repeated use of FieldMaskUtil#merge by caching |
| constructed FieldMaskTrees. |
| * 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. |
| * 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. |
| * Make message-type extensions merge from wire-format instead of building up instances and merging afterwards. This has much better performance. |
| * 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. |
| * Move proto wireformat parsing functionality from the private "parsing constructor" to the Builder class. |
| * 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. https://github.com/protocolbuffers/protobuf/issues/10624 |
| * Performance test for TextFormat to verify fix for https://github.com/protocolbuffers/protobuf/security/advisories/GHSA-h4h5-3hr4-j3g2 |
| |
| # Python |
| * Changes ordering of printed fields in .pyi files from lexicographic to the same ordering found in the proto descriptor. |
| * Adds GeneratedCodeInfo annotations to python proto .pyi outputs as a base64 encoded docstring in the last line of the .pyi file for code analysis tools. |
| * Fix message factory's behavior in python cpp extension to return same message classes for same descriptor, even if the factories are different. |
| * Add type annotation for enum value fields in enum classes. |
| |
| # Compiler |
| * Print full path name of source .proto file on error |
| * Include proto message type in the annotation comments. |