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.