12022-12-07 version 21.11 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 2 Python 3 * Add license file to pypi wheels (#10936) 4 * Fix round-trip bug (#10158) 5 62022-11-29 version 21.10 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 7 8 Java 9 * Use bit-field int values in buildPartial to skip work on unset groups of fields. (#10960) 10 * Mark nested builder as clean after clear is called (#10984) 11 UPB 12 * Fix UPB_LIKELY() for 32-bit Windows builds; update protobuf_deps to point to the current upb 21.x (#11028) 13 Other 14 * Add public modifiers to kotlin code (#11068) 15 162022-10-26 version 21.9 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 17 18 C++ 19 * Update zlib to 1.2.13 (#10819) 20 21 Python 22 * Target MacOS 10.9 to fix #10799 (#10807) 23 24 Ruby 25 * Replace libc strdup usage with internal impl to restore musl compat (#10818) 26 272022-10-18 version 21.8 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 28 29 Other 30 * Fix for grpc.tools #17995 & protobuf #7474 (handle UTF-8 paths in argumentfile) (#10721) 31 32 C++ 33 * 21.x No longer define no_threadlocal on OpenBSD (#10743) 34 35 Java 36 * Mark default instance as immutable first to avoid race during static initialization of default instances (#10771) 37 38 Ruby 39 * Auto capitalize enums name in Ruby (#10454) (#10763) 40 41 422022-09-29 version 21.7 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 43 Java 44 * Refactoring java full runtime to reuse sub-message builders and prepare to 45 migrate parsing logic from parse constructor to builder. 46 * Move proto wireformat parsing functionality from the private "parsing 47 constructor" to the Builder class. 48 * Change the Lite runtime to prefer merging from the wireformat into mutable 49 messages rather than building up a new immutable object before merging. This 50 way results in fewer allocations and copy operations. 51 * Make message-type extensions merge from wire-format instead of building up 52 instances and merging afterwards. This has much better performance. 53 * Fix TextFormat parser to build up recurring (but supposedly not repeated) 54 sub-messages directly from text rather than building a new sub-message and 55 merging the fully formed message into the existing field. 56 572022-09-13 version 21.6 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 58 59C++ 60* Reduce memory consumption of MessageSet parsing 61 622022-08-09 version 21.5 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 63 64 PHP 65 * Added getContainingOneof and getRealContainingOneof to descriptor. 66 * fix PHP readonly legacy files for nested messages 67 68 Python 69 * Fixed comparison of maps in Python. 70 71 722022-07-25 version 21.4 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 73 74 C++ 75 * Reduce the required alignment of ArenaString from 8 to 4 (#10298) 76 77 782022-07-19 version 21.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 79 C++ 80 * Add header search paths to Protobuf-C++.podspec (#10024) 81 * Fixed Visual Studio constinit errors (#10232) 82 * Fix #9947: make the ABI compatible between debug and non-debug builds (#10271) 83 84 UPB 85 * Allow empty package names (fixes behavior regression in 4.21.0) 86 * Fix a SEGV bug when comparing a non-materialized sub-message (#10208) 87 * Fix several bugs in descriptor mapping containers (eg. descriptor.services_by_name) 88 * for x in mapping now yields keys rather than values, to match Python conventions and the behavior of the old library. 89 * Lookup operations now correctly reject unhashable types as map keys. 90 * We implement repr() to use the same format as dict. 91 * Fix maps to use the ScalarMapContainer class when appropriate 92 * Fix bug when parsing an unknown value in a proto2 enum extension (protocolbuffers/upb#717) 93 94 PHP 95 * Add "readonly" as a keyword for PHP and add previous classnames to descriptor pool (#10041) 96 97 Python 98 * Make //:protobuf_python and //:well_known_types_py_pb2 public (#10118) 99 100 Bazel 101 * Add back a filegroup for :well_known_protos (#10061) 102 1032022-06-27 version 21.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 104 C++ 105 * ArenaString improvements (fix alignment issue) 106 107 PHP 108 * API changes for OneOf (#10102) 109 110 1112022-05-27 version 21.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 112 113 C++ 114 * cmake: Revert "Fix cmake install targets (#9822)" (#10060) 115 * Remove Abseil dependency from CMake build (#10056) 116 117 Python 118 * Update python wheel metadata with more information incl. required python version (#10058) 119 * Fix segmentation fault when instantiating field via repeated field assignment (#10066) 120 1212022-05-25 version 21.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 122 123 C++ 124 * cmake: Call get_filename_component() with DIRECTORY mode instead of PATH mode (#9614) 125 * Escape GetObject macro inside protoc-generated code (#9739) 126 * Update CMake configuration to add a dependency on Abseil (#9793) 127 * Fix cmake install targets (#9822) 128 * Use __constinit only in GCC 12.2 and up (#9936) 129 130 Java 131 * Update protobuf_version.bzl to separate protoc and per-language java … (#9900) 132 133 Python 134 * Increment python major version to 4 in version.json for python upb (#9926) 135 * The C extension module for Python has been rewritten to use the upb library. 136 This is expected to deliver significant performance benefits, especially when 137 parsing large payloads. There are some minor breaking changes, but these 138 should not impact most users. For more information see: 139 https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates 140 * Fixed win32 build and fixed str(message) on all Windows platforms. (#9976) 141 * The binary wheel for macOS now supports Apple silicon. 142 143 PHP 144 * [PHP] fix PHP build system (#9571) 145 * Fix building packaged PHP extension (#9727) 146 * fix: reserve "ReadOnly" keyword for PHP 8.1 and add compatibility (#9633) 147 * fix: phpdoc syntax for repeatedfield parameters (#9784) 148 * fix: phpdoc for repeatedfield (#9783) 149 * Change enum string name for reserved words (#9780) 150 * chore: [PHP] fix phpdoc for MapField keys (#9536) 151 * Fixed PHP SEGV by not writing to shared memory for zend_class_entry. (#9996) 152 153 Ruby 154 * Allow pre-compiled binaries for ruby 3.1.0 (#9566) 155 * Implement `respond_to?` in RubyMessage (#9677) 156 * [Ruby] Fix RepeatedField#last, #first inconsistencies (#9722) 157 * Do not use range based UTF-8 validation in truffleruby (#9769) 158 * Improve range handling logic of `RepeatedField` (#9799) 159 * Support x64-mingw-ucrt platform 160 161 Other 162 * [Kotlin] remove redundant public modifiers for compiled code (#9642) 163 * [C#] Update GetExtension to support getting typed value (#9655) 164 * Fix invalid dependency manifest when using `descriptor_set_out` (#9647) 165 * Fix C# generator handling of a field named "none" in a oneof (#9636) 166 * Add initial version.json file for 21-dev (#9840) 167 * Remove duplicate java generated code (#9909) 168 * Cherry-pick PR #9981 into 21.x branch (#10000) 169 170 1712022-05-19 version 21.0-rc2(C++/Java/Python/PHP/Objective-C/C#/Ruby) 172 173 Python 174 * Fix windows builds 175 * Throw more helpful error if generated code is out of date 176 * Fixed two reference leaks 177 178 Ruby 179 * Support x64-mingw-ucrt platform 180 181 PHP 182 * Fix SEGV by not writing to shared memory for zend_class_entry 183 184 C# 185 * Suppress warning CS8981 186 187 Other 188 * Fix Maven release to release actual osx_aarch64 binary 189 * Fix protoc zips to have the proto files for well known types 190 1912022-05-10 version 21.0-rc1 (C++/Java/Python/PHP/Objective-C/C#/Ruby) 192 193 C++ 194 * Rename main cmake/CMakeLists.txt to CMakeLists.txt (#9603) 195 * avoid allocating memory if all extension are cleared (#9345) 196 * cmake: Call get_filename_component() with DIRECTORY mode instead of PATH mode (#9614) 197 * Escape GetObject macro inside protoc-generated code (#9739) 198 * Update CMake configuration to add a dependency on Abseil (#9793) 199 * Use __constinit only in GCC 12.2 and up (#9936) 200 * Refactor generated message class layout 201 * Optimize tokenizer ParseInteger by removing division 202 * Reserve exactly the right amount of capacity in ExtensionSet::MergeFrom 203 * Parse FLT_MAX correctly when represented in JSON 204 205 Java 206 * Update protobuf_version.bzl to separate protoc and per-language java … (#9900) 207 * 6x speedup in ArrayEncoder.writeUInt32NotTag 208 209 Python 210 * Increment python major version to 4 in version.json for python upb (#9926) 211 * The C extension module for Python has been rewritten to use the upb library. 212 This is expected to deliver significant performance benefits, especially when 213 parsing large payloads. There are some minor breaking changes, but these 214 should not impact most users. For more information see: 215 https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates 216 * Due to the breaking changes for Python, the major version number for Python 217 has been incremented. 218 * The binary wheel for macOS now supports Apple silicon. 219 220 221 PHP 222 * chore: [PHP] fix phpdoc for MapField keys (#9536) 223 * [PHP] Remove unnecessary zval initialization (#9600) 224 * [PHP] fix PHP build system (#9571) 225 * Fix building packaged PHP extension (#9727) 226 * fix: reserve "ReadOnly" keyword for PHP 8.1 and add compatibility (#9633) 227 * fix: phpdoc syntax for repeatedfield parameters (#9784) 228 * fix: phpdoc for repeatedfield (#9783) 229 * Change enum string name for reserved words (#9780) 230 * Fixed composer.json to only advertise compatibility with PHP 7.0+. (#9819) 231 232 Ruby 233 * Allow pre-compiled binaries for ruby 3.1.0 (#9566) 234 * Implement `respond_to?` in RubyMessage (#9677) 235 * [Ruby] Fix RepeatedField#last, #first inconsistencies (#9722) 236 * Do not use range based UTF-8 validation in truffleruby (#9769) 237 * Improve range handling logic of `RepeatedField` (#9799) 238 * Disable the aarch64 build on macOS until it can be fixed. (#9816) 239 240 Other 241 * [Kotlin] remove redundant public modifiers for compiled code (#9642) 242 * [C#] Update GetExtension to support getting typed value (#9655) 243 * Fix invalid dependency manifest when using `descriptor_set_out` (#9647) 244 * Fix C# generator handling of a field named "none" in a oneof (#9636) 245 * Add initial version.json file for 21-dev (#9840) 246 * Remove duplicate java generated code (#9909) 247 * Fix versioning issues in 3.20.0 248 249 Compiler 250 * Protoc outputs the list of suggested field numbers when invalid field 251 numbers are specified in the .proto file. 252 * Require package names to be less than 512 bytes in length 253 2542022-04-21 version 3.20.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 255 256 PHP 257 * Fix building packaged PHP extension (#9727) 258 259 Other 260 * Fix versioning issues in 3.20.0 261 2622022-03-04 version 3.20.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 263 264 Ruby 265 * Dropped Ruby 2.3 and 2.4 support for CI and releases. (#9311) 266 * Added Ruby 3.1 support for CI and releases (#9566). 267 * Message.decode/encode: Add recursion_limit option (#9218/#9486) 268 * Allocate with xrealloc()/xfree() so message allocation is visible to the 269 Ruby GC. In certain tests this leads to much lower memory usage due to more 270 frequent GC runs (#9586). 271 * Fix conversion of singleton classes in Ruby (#9342) 272 * Suppress warning for intentional circular require (#9556) 273 * JSON will now output shorter strings for double and float fields when possible 274 without losing precision. 275 * Encoding and decoding of binary format will now work properly on big-endian 276 systems. 277 * UTF-8 verification was fixed to properly reject surrogate code points. 278 * Unknown enums for proto2 protos now properly implement proto2's behavior of 279 putting such values in unknown fields. 280 281 Java 282 * Revert "Standardize on Array copyOf" (#9400) 283 * Resolve more java field accessor name conflicts (#8198) 284 * Don't support map fields in DynamicMessage.Builder.{getFieldBuilder,getRepeatedFieldBuilder} 285 * Fix parseFrom to only throw InvalidProtocolBufferException 286 * InvalidProtocolBufferException now allows arbitrary wrapped Exception types. 287 * Fix bug in `FieldSet.Builder.mergeFrom` 288 * Flush CodedOutputStream also flushes underlying OutputStream 289 * When oneof case is the same and the field type is Message, merge the 290 subfield. (previously it was replaced.)’ 291 * Add @CheckReturnValue to some protobuf types 292 * Report original exceptions when parsing JSON 293 * Add more info to @deprecated javadoc for set/get/has methods 294 * Fix initialization bug in doc comment line numbers 295 * Fix comments for message set wire format. 296 297 Kotlin 298 * Add test scope to kotlin-test for protobuf-kotlin-lite (#9518) 299 * Add orNull extensions for optional message fields. 300 * Add orNull extensions to all proto3 message fields. 301 302 Python 303 * Dropped support for Python < 3.7 (#9480) 304 * Protoc is now able to generate python stubs (.pyi) with --pyi_out 305 * Pin multibuild scripts to get manylinux1 wheels back (#9216) 306 * Fix type annotations of some Duration and Timestamp methods. 307 * Repeated field containers are now generic in field types and could be used 308 in type annotations. 309 * Protobuf python generated codes are simplified. Descriptors and message 310 classes' definitions are now dynamic created in internal/builder.py. 311 Insertion Points for messages classes are discarded. 312 * has_presence is added for FieldDescriptor in python 313 * Loosen indexing type requirements to allow valid __index__() implementations 314 rather than only PyLongObjects. 315 * Fix the deepcopy bug caused by not copying message_listener. 316 * Added python JSON parse recursion limit (default 100) 317 * Path info is added for python JSON parse errors 318 * Pure python repeated scalar fields will not able to pickle. Convert to list 319 first. 320 * Timestamp.ToDatetime() now accepts an optional tzinfo parameter. If 321 specified, the function returns a timezone-aware datetime in the given time 322 zone. If omitted or None, the function returns a timezone-naive UTC datetime 323 (as previously). 324 * Adds client_streaming and server_streaming fields to MethodDescriptor. 325 * Add "ensure_ascii" parameter to json_format.MessageToJson. This allows smaller 326 JSON serializations with UTF-8 or other non-ASCII encodings. 327 * Added experimental support for directly assigning numpy scalars and array. 328 * Improve the calculation of public_dependencies in DescriptorPool. 329 * [Breaking Change] Disallow setting fields to numpy singleton arrays or repeated fields to numpy 330 multi-dimensional arrays. Numpy arrays should be indexed or flattened explicitly before assignment. 331 332 Compiler 333 * Migrate IsDefault(const std::string*) and UnsafeSetDefault(const std::string*) 334 * Implement strong qualified tags for TaggedPtr 335 * Rework allocations to power-of-two byte sizes. 336 * Migrate IsDefault(const std::string*) and UnsafeSetDefault(const std::string*) 337 * Implement strong qualified tags for TaggedPtr 338 * Make TaggedPtr Set...() calls explicitly spell out the content type. 339 * Check for parsing error before verifying UTF8. 340 * Enforce a maximum message nesting limit of 32 in the descriptor builder to 341 guard against stack overflows 342 * Fixed bugs in operators for RepeatedPtrIterator 343 * Assert a maximum map alignment for allocated values 344 * Fix proto1 group extension protodb parsing error 345 * Do not log/report the same descriptor symbol multiple times if it contains 346 more than one invalid character. 347 * Add UnknownFieldSet::SerializeToString and SerializeToCodedStream. 348 * Remove explicit default pointers and deprecated API from protocol compiler 349 350 Arenas 351 * Change Repeated*Field to reuse memory when using arenas. 352 * Implements pbarenaz for profiling proto arenas 353 * Introduce CreateString() and CreateArenaString() for cleaner semantics 354 * Fix unreferenced parameter for MSVC builds 355 * Add UnsafeSetAllocated to be used for one-of string fields. 356 * Make Arena::AllocateAligned() a public function. 357 * Determine if ArenaDtor related code generation is necessary in one place. 358 * Implement on demand register ArenaDtor for InlinedStringField 359 360 C++ 361 * Enable testing via CTest (#8737) 362 * Add option to use external GTest in CMake (#8736) 363 * CMake: Set correct sonames for libprotobuf-lite.so and libprotoc.so (#8635) (#9529) 364 * Add cmake option `protobuf_INSTALL` to not install files (#7123) 365 * CMake: Allow custom plugin options e.g. to generate mocks (#9105) 366 * CMake: Use linker version scripts (#9545) 367 * Manually *struct Cord fields to work better with arenas. 368 * Manually destruct map fields. 369 * Generate narrower code 370 * Fix https://github.com/protocolbuffers/protobuf/issues/9378 by removing 371 shadowed _cached_size_ field 372 * Remove GetPointer() and explicit nullptr defaults. 373 * Add proto_h flag for speeding up large builds 374 * Add missing overload for reference wrapped fields. 375 * Add MergedDescriptorDatabase::FindAllFileNames() 376 * RepeatedField now defines an iterator type instead of using a pointer. 377 * Remove obsolete macros GOOGLE_PROTOBUF_HAS_ONEOF and GOOGLE_PROTOBUF_HAS_ARENAS. 378 379 PHP 380 * Fix: add missing reserved classnames (#9458) 381 * PHP 8.1 compatibility (#9370) 382 383 C# 384 * Fix trim warnings (#9182) 385 * Fixes NullReferenceException when accessing FieldDescriptor.IsPacked (#9430) 386 * Add ToProto() method to all descriptor classes (#9426) 387 * Add an option to preserve proto names in JsonFormatter (#6307) 388 389 Objective-C 390 * Add prefix_to_proto_package_mappings_path option. (#9498) 391 * Rename `proto_package_to_prefix_mappings_path` to `package_to_prefix_mappings_path`. (#9552) 392 * Add a generation option to control use of forward declarations in headers. (#9568) 393 3942022-01-28 version 3.19.4 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 395 396 Python 397 * Make libprotobuf symbols local on OSX to fix issue #9395 (#9435) 398 399 Ruby 400 * Fixed a data loss bug that could occur when the number of `optional` 401 fields in a message is an exact multiple of 32. (#9440). 402 403 PHP 404 * Fixed a data loss bug that could occur when the number of `optional` 405 fields in a message is an exact multiple of 32. (#9440). 406 4072022-01-10 version 3.19.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 408 409 Python 410 * Fix missing Windows wheel for Python 3.10 on PyPI 411 4122022-01-05 version 3.19.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 413 414 Java 415 * Improve performance characteristics of UnknownFieldSet parsing (#9371) 416 * This release addresses a Security Advisory for Java users 417 (https://github.com/protocolbuffers/protobuf/security/advisories/GHSA-wrvw-hg22-4m67) 418 4192022-01-05 version 3.18.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 420 421 Java 422 * Improve performance characteristics of UnknownFieldSet parsing (#9371) 423 * This release addresses a Security Advisory for Java users 424 (https://github.com/protocolbuffers/protobuf/security/advisories/GHSA-wrvw-hg22-4m67) 425 4262022-01-05 version 3.16.1 (Java) 427 428 Java 429 * Improve performance characteristics of UnknownFieldSet parsing (#9371) 430 * This release addresses a Security Advisory for Java users 431 (https://github.com/protocolbuffers/protobuf/security/advisories/GHSA-wrvw-hg22-4m67) 432 4332021-10-28 version 3.19.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 434 435 Bazel 436 * Ensure that release archives contain everything needed for Bazel (#9131) 437 * Align dependency handling with Bazel best practices (#9165) 438 439 JavaScript 440 * Fix `ReferenceError: window is not defined` when getting the global object (#9156) 441 442 Ruby 443 * Fix memory leak in MessageClass.encode (#9150) 444 4452021-10-15 version 3.19.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 446 447 C++ 448 * Make proto2::Message::DiscardUnknownFields() non-virtual 449 * Separate RepeatedPtrField into its own header file 450 * For default floating point values of 0, consider all bits significant 451 * cmake: support `MSVC_RUNTIME_LIBRARY` property (#8851) 452 * Fix shadowing warnings (#8926) 453 * Fix for issue #8484, constant initialization doesn't compile in msvc clang-cl environment (#8993) 454 * Fix build on AIX and SunOS (#8373) (#9065) 455 * Add Android stlport and default toolchains to BUILD. (#8290) 456 457 Java 458 * For default floating point values of 0, consider all bits significant 459 * Annotate `//java/com/google/protobuf/util/...` with nullness annotations 460 * Use ArrayList copy constructor (#7853) 461 462 Kotlin 463 * Switch Kotlin proto DSLs to be implemented with inline value classes 464 * Fix inlining and deprecation for repeated string fields in kotlin (#9120) 465 466 Python 467 * Proto2 DecodeError now includes message name in error message 468 * Make MessageToDict convert map keys to strings (#8122) 469 * Add python-requires in setup.py (#8989) 470 * Add python 3.10 (#9034) 471 472 JavaScript 473 * Skip exports if not available by CommonJS (#8856) 474 * JS: Comply with CSP no-unsafe-eval. (#8864) 475 476 PHP 477 * Added "object" as a reserved name for PHP (#8962) 478 479 Ruby 480 * Override Map.clone to use Map's dup method (#7938) 481 * Ruby: build extensions for arm64-darwin (#8232) 482 * Add class method Timestamp.from_time to ruby well known types (#8562) 483 * Adopt pure ruby DSL implementation for JRuby (#9047) 484 * Add size to Map class (#8068) 485 * Fix for descriptor_pb.rb: google/protobuf should be required first (#9121) 486 487 C# 488 * Correctly set ExtensionRegistry when parsing with MessageParser, but using an already existing CodedInputStream (#7246) 489 * [C#] Make FieldDescriptor propertyName public (#7642) 490 4912021-10-04 version 3.18.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 492 493 Python 494 * Update setup.py to reflect that we now require at least Python 3.5 (#8989) 495 * Performance fix for DynamicMessage: force GetRaw() to be inlined (#9023) 496 497 Ruby 498 * Update ruby_generator.cc to allow proto2 imports in proto3 (#9003) 499 5002021-09-13 version 3.18.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 501 502 Python 503 * Removed Python 2.x support. 504 * Pure python descriptor_pool.AddSerializedFile() will always build the 505 file and return FileDescriptor which is same with python c++ extension 506 * type errors thrown by MergeFrom now report fully qualified class names 507 * Protobuf python generated code are simplified. Some platforms that uses 508 "is"("is not") to compare the enum or descriptor's label/type may fail, 509 should use "=="("!=") instead. 510 511 C++ 512 * Generated code now uses the c++11 standard integer types int{32,64}_t and 513 uint{32,64}_t 514 * Reduce memory usage of the DescriptorPool type. 515 * Moved the zero-argument New() method on messages to the base class (internal 516 optimization). 517 * Unused return values marked with `PROTOBUF_MUST_USE_RESULT` are now 518 correctly attributed. 519 * Demotes PrintPath log for maps in MessageDifferencer down from WARNING to 520 INFO. 521 * Make sure FullMessageName() is always private. 522 * Fix race condition in EnumDescriptor. 523 * Remove MessageLite::GetMaybeArenaPointer. 524 525 Java 526 * Add @deprecated javadoc for set/get/has methods 527 * correctly decode \? escape sequence in text protos 528 * Avoid depending on Objects.requireNonNull() until we can verify that no 529 users are depending on older Android versions. 530 * disallow null string map values in put and putAll 531 * Add `@CheckReturnValue` to `ByteString` API. 532 * Make the `hasPresence` method public in `FieldDescriptor`. 533 * Report more detailed messages in Duration and Timestamp proto parsing 534 errors. 535 * New Timestamps.fromDate utility method that converts a java.util.Date to a 536 Timestamp proto object. 537 538 Kotlin 539 * Generated Kotlin code is Explicit API mode compatible 540 5412021-09-13 version 3.18.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 542 C++ 543 * Fix warnings raised by clang 11 (#8664) 544 * Make StringPiece constructible from std::string_view (#8707) 545 * Add missing capability attributes for LLVM 12 (#8714) 546 * Stop using std::iterator (deprecated in C++17). (#8741) 547 * Move field_access_listener from libprotobuf-lite to libprotobuf (#8775) 548 * Fix #7047 Safely handle setlocale (#8735) 549 * Remove deprecated version of SetTotalBytesLimit() (#8794) 550 * Support arena allocation of google::protobuf::AnyMetadata (#8758) 551 * Fix undefined symbol error around SharedCtor() (#8827) 552 * Fix default value of enum(int) in json_util with proto2 (#8835) 553 * Better Smaller ByteSizeLong 554 * Introduce event filters for inject_field_listener_events 555 * Reduce memory usage of DescriptorPool 556 * For lazy fields copy serialized form when allowed. 557 * Re-introduce the InlinedStringField class 558 * v2 access listener 559 * Reduce padding in the proto's ExtensionRegistry map. 560 * GetExtension performance optimizations 561 * Make tracker a static variable rather than call static functions 562 * Support extensions in field access listener 563 * Annotate MergeFrom for field access listener 564 * Fix incomplete types for field access listener 565 * Add map_entry/new_map_entry to SpecificField in MessageDifferencer. They 566 record the map items which are different in MessageDifferencer's reporter. 567 * Reduce binary size due to fieldless proto messages 568 * TextFormat: ParseInfoTree supports getting field end location in addition to 569 start. 570 * Fix repeated enum extension size in field listener 571 * Enable Any Text Expansion for Descriptors::DebugString() 572 * Switch from int{8,16,32,64} to int{8,16,32,64}_t 573 * Reduce memory usage of the DescriptorPool type. 574 575 Java 576 * Fix errorprone conflict (#8723) 577 * Removing deprecated TimeUtil class. (#8749) 578 * Optimized FieldDescriptor.valueOf() to avoid array copying. 579 * Removing deprecated TimeUtil class. 580 * Add Durations.parseUnchecked(String) and Timestamps.parseUnchecked(String) 581 * FieldMaskUtil: Add convenience method to mask the fields out of a given proto. 582 583 JavaScript 584 * Optimize binary parsing of repeated float64 585 * Fix for optimization when reading doubles from binary wire format 586 * Replace toArray implementation with toJSON. 587 588 Python 589 * Drops support for 2.7 and 3.5. 590 591 PHP 592 * Migrate PHP & Ruby to ABSL wyhash (#8854) 593 * Added support for PHP 8.1 (currently in RC1) to the C extension (#8964) 594 * Fixed PHP SEGV when constructing messages from a destructor. (#8969) 595 596 Ruby 597 * Move DSL implementation from C to pure Ruby (#8850) 598 * Fixed a memory bug with RepeatedField#+. (#8970) 599 600 Other 601 * [csharp] ByteString.CreateCodedInput should use ArraySegment offset and count (#8740) 602 * [ObjC] Add support for using the proto package to prefix symbols. (#8760) 603 * field_presence.md: fix Go example (#8788) 604 605 606 Kotlin 607 * Suppress NOTHING_TO_INLINE in Kotlin generated inline functions. 608 6092021-06-04 version 3.17.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 610 Python 611 * Note: This is the last release to support Python 2.7. Future releases will 612 require Python >= 3.5. 613 614 C++ 615 * Introduce FieldAccessListener. 616 * Stop emitting boilerplate {Copy/Merge}From in each ProtoBuf class 617 * Fixed some uninitialized variable warnings in generated_message_reflection.cc. 618 619 Kotlin 620 * Fix duplicate proto files error (#8699) 621 622 Java 623 * Fixed parser to check that we are at a proper limit when a sub-message has 624 finished parsing. 625 6262021-05-25 version 3.17.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 627 Kotlin 628 * Fix duplicate class error (#8653) 629 630 PHP 631 * Fixed SEGV in sub-message getters for well-known types when message is unset 632 (#8670) 633 6342021-05-07 version 3.17.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 635 PHP 636 * Fixed PHP memory leaks and arginfo errors. (#8614) 637 * Fixed JSON parser to allow multiple values from the same oneof as long as 638 all but one are null. 639 640 Ruby 641 * Fixed memory bug: properly root repeated/map field when assigning. (#8639) 642 * Fixed JSON parser to allow multiple values from the same oneof as long as 643 all but one are null. 644 645 6462021-05-07 version 3.17.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 647 648 Protocol Compiler 649 * Fix the generated source information for reserved values in Enums. 650 651 C++ 652 * Fix -Wunused-parameter in map<string, int> fields (fixes #8494) (#8500) 653 * Use byteswap.h when building against musl libc (#8503) 654 * Fix -Wundefined-inline error when using SharedCtor() or SharedDtor() (#8532) 655 * Fix bug where `Descriptor::DebugString()` printed proto3 synthetic oneofs. 656 * Provide stable versions of `SortAndUnique()`. 657 * Make sure to cache proto3 optional message fields when they are cleared. 658 * Expose UnsafeArena methods to Reflection. 659 * Use std::string::empty() rather than std::string::size() > 0. 660 661 Kotlin 662 * Restrict extension setter and getter operators to non-nullable T. 663 664 Java 665 * updating GSON and Guava to more recent versions (#8524) 666 * Reduce the time spent evaluating isExtensionNumber by storing the extension 667 ranges in a TreeMap for faster queries. This is particularly relevant for 668 protos which define a large number of extension ranges, for example when 669 each tag is defined as an extension. 670 * Fix java bytecode estimation logic for optional fields. 671 * Optimize Descriptor.isExtensionNumber. 672 673 Python 674 * Add MethodDescriptor.CopyToProto() (#8327) 675 * Remove unused python_protobuf.{cc,h} (#8513) 676 * Start publishing python aarch64 manylinux wheels normally (#8530) 677 * Fix constness issue detected by MSVC standard conforming mode (#8568) 678 * Make JSON parsing match C++ and Java when multiple fields from the same 679 oneof are present and all but one is null. 680 681 Ruby 682 * Add support for proto3 json_name in compiler and field definitions (#8356) 683 * Fixed memory leak of Ruby arena objects. (#8461) 684 * Fix source gem compilation (#8471) 685 * Fix various exceptions in Ruby on 64-bit Windows (#8563) 686 * Fix crash when calculating Message hash values on 64-bit Windows (#8565) 687 688 Conformance Tests 689 * Added a conformance test for the case of multiple fields from the same 690 oneof. 691 6922021-04-06 version 3.16.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 693 Other 694 * Opensourcing kotlin protos (#8272) 695 * Use a newer version of rules_proto, with the new rule `proto_descriptor_set` (#8469) 696 697 C++ 698 * Fix compiler warnings issue found in conformance_test_runner #8189 (#8190) 699 * Fix MinGW-w64 build issues. (#8286) 700 * [Protoc] C++ Resolved an issue where NO_DESTROY and CONSTINIT are in incorrect order (#8296) 701 * Fix PROTOBUF_CONSTINIT macro redefinition (#8323) 702 * Delete StringPiecePod (#8353) 703 * Fix gcc error: comparison of unsigned expression in '>= 0' is always … (#8309) 704 * Fix cmake install on iOS (#8301) 705 * Create a CMake option to control whether or not RTTI is enabled (#8347) 706 * Fix endian.h location on FreeBSD (#8351) 707 * Refactor util::Status (#8354) 708 * Make util::Status more similar to absl::Status (#8405) 709 * Fix -Wsuggest-destructor-override for generated C++ proto classes. (#8408) 710 * Refactor StatusOr and StringPiece (#8406) 711 * Refactor uint128 (#8416) 712 * The ::pb namespace is no longer exposed due to conflicts. 713 * Allow MessageDifferencer::TreatAsSet() (and friends) to override previous 714 calls instead of crashing. 715 * Reduce the size of generated proto headers for protos with `string` or 716 `bytes` fields. 717 * Move arena() operation on uncommon path to out-of-line routine 718 * For iterator-pair function parameter types, take both iterators by value. 719 * Code-space savings and perhaps some modest performance improvements in 720 RepeatedPtrField. 721 * Eliminate nullptr check from every tag parse. 722 * Remove unused _$name$_cached_byte_size_ fields. 723 * Serialize extension ranges together when not broken by a proto field in the 724 middle. 725 * Do out-of-line allocation and deallocation of string object in ArenaString. 726 * Streamline ParseContext::ParseMessage<T> to avoid code bloat and improve 727 performance. 728 * New member functions RepeatedField::Assign, RepeatedPtrField::{Add, Assign}. 729 * Fix undefined behavior warning due to innocuous uninitialization of value 730 on an error path. 731 * Avoid expensive inlined code space for encoding message length for messages 732 >= 128 bytes and instead do a procedure call to a shared out-of-line routine. 733 * util::DefaultFieldComparator will be final in a future version of protobuf. 734 Subclasses should inherit from SimpleFieldComparator instead. 735 736 C# 737 * Add .NET 5 target and improve WriteString performance with SIMD (#8147) 738 739 Java 740 * deps: update JUnit and Truth (#8319) 741 * Detect invalid overflow of byteLimit and return InvalidProtocolBufferException as documented. 742 * Exceptions thrown while reading from an InputStream in parseFrom are now 743 included as causes. 744 * Support potentially more efficient proto parsing from RopeByteStrings. 745 * Clarify runtime of ByteString.Output.toStringBuffer(). 746 * Added UnsafeByteOperations to protobuf-lite (#8426) 747 748 JavaScript 749 * Make Any.pack() chainable. 750 751 Python 752 * Fix some constness / char literal issues being found by MSVC standard conforming mode (#8344) 753 * Switch on "new" buffer API (#8339) 754 * Enable crosscompiling aarch64 python wheels under dockcross manylinux docker image (#8280) 755 * Fixed a bug in text format where a trailing colon was printed for repeated field. 756 * When TextFormat encounters a duplicate message map key, replace the current 757 one instead of merging. 758 759 Objective-C 760 * Move the class map to a CFDictionary. (#8328) 761 762 PHP 763 * read_property() handler is not supposed to return NULL (#8362) 764 * Changed parameter type from long to integer (#7613) 765 * fix: README supported PHP version for C extension (#8236) 766 767 Ruby 768 * Fixed quadratic memory usage when appending to arrays. (#8364) 769 * Fixed memory leak of Ruby arena objects. (#8461) 770 * Add support for proto3 json_name in compiler and field definitions. (#8356) 771 772 Other 773 * Some doc on AOT compilation and protobuf (#8294) 774 * [CMake] Ability to pass options to protoc executable from cmake (#8374) 775 * Add --fatal_warnings flag to treat warnings as errors (#8131) 776 * [bazel] Remove deprecated way to depend on googletest (#8396) 777 * add error returns missing from protoc to prevent it from exiting with… (#8409) 778 779 7802021-04-07 version 3.15.8 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 781 782 Ruby 783 * Fixed memory leak of Ruby arena objects (#8461) 784 7852021-04-02 version 3.15.7 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 786 787 C++ 788 * Remove the ::pb namespace (alias) (#8423) 789 790 Ruby 791 * Fix unbounded memory growth for Ruby <2.7 (#8429) 792 * Fixed message equality in cases where the message type is different (#8434) 793 7942021-03-10 version 3.15.6 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 795 796 Ruby 797 * Fixed bug in string comparison logic (#8386) 798 7992021-03-04 version 3.15.5 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 800 801 Ruby 802 * Fixed quadratic memory use in array append (#8379) 803 804 PHP 805 * Fixed quadratic memory use in array append (#8379) 806 807 C++ 808 * Do not disable RTTI by default in the CMake build (#8377) 809 8102021-03-02 version 3.15.4 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 811 812 Ruby 813 * Fixed SEGV when users pass nil messages (#8363) 814 * Fixed quadratic memory usage when appending to arrays (#8364) 815 816 C++ 817 * Create a CMake option to control whether or not RTTI is enabled (#8361) 818 819 PHP 820 * read_property() handler is not supposed to return NULL (#8362) 821 8222021-02-25 version 3.15.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 823 824 Ruby 825 * Ruby <2.7 now uses WeakMap too, which prevents memory leaks. (#8341) 826 8272021-02-23 version 3.15.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 828 829 Ruby 830 * Fix for FieldDescriptor.get(msg) (#8330) 831 832 C++ 833 * Fix PROTOBUF_CONSTINIT macro redefinition (#8323) 834 8352021-02-05 version 3.15.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 836 837 Ruby 838 * Bugfix for Message.[] for repeated or map fields (#8313) 839 8402021-02-05 version 3.15.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 841 842 Protocol Compiler 843 * Optional fields for proto3 are enabled by default, and no longer require 844 the --experimental_allow_proto3_optional flag. 845 846 C++ 847 * MessageDifferencer: fixed bug when using custom ignore with multiple 848 unknown fields 849 * Use init_seg in MSVC to push initialization to an earlier phase. 850 * Runtime no longer triggers -Wsign-compare warnings. 851 * Fixed -Wtautological-constant-out-of-range-compare warning. 852 * DynamicCastToGenerated works for nullptr input for even if RTTI is disabled 853 * Arena is refactored and optimized. 854 * Clarified/specified that the exact value of Arena::SpaceAllocated() is an 855 implementation detail users must not rely on. It should not be used in 856 unit tests. 857 * Change the signature of Any::PackFrom() to return false on error. 858 * Add fast reflection getter API for strings. 859 * Constant initialize the global message instances 860 * Avoid potential for missed wakeup in UnknownFieldSet 861 * Now Proto3 Oneof fields have "has" methods for checking their presence in 862 C++. 863 * Bugfix for NVCC 864 * Return early in _InternalSerialize for empty maps. 865 * Adding functionality for outputting map key values in proto path logging 866 output (does not affect comparison logic) and stop printing 'value' in the 867 path. The modified print functionality is in the 868 MessageDifferencer::StreamReporter. 869 * Fixed https://github.com/protocolbuffers/protobuf/issues/8129 870 * Ensure that null char symbol, package and file names do not result in a 871 crash. 872 * Constant initialize the global message instances 873 * Pretty print 'max' instead of numeric values in reserved ranges. 874 * Removed remaining instances of std::is_pod, which is deprecated in C++20. 875 * Changes to reduce code size for unknown field handling by making uncommon 876 cases out of line. 877 * Fix std::is_pod deprecated in C++20 (#7180) 878 * Fix some -Wunused-parameter warnings (#8053) 879 * Fix detecting file as directory on zOS issue #8051 (#8052) 880 * Don't include sys/param.h for _BYTE_ORDER (#8106) 881 * remove CMAKE_THREAD_LIBS_INIT from pkgconfig CFLAGS (#8154) 882 * Fix TextFormatMapTest.DynamicMessage issue#5136 (#8159) 883 * Fix for compiler warning issue#8145 (#8160) 884 * fix: support deprecated enums for GCC < 6 (#8164) 885 * Fix some warning when compiling with Visual Studio 2019 on x64 target (#8125) 886 887 Python 888 * Provided an override for the reverse() method that will reverse the internal 889 collection directly instead of using the other methods of the BaseContainer. 890 * MessageFactory.CreateProtoype can be overridden to customize class creation. 891 * Fix PyUnknownFields memory leak (#7928) 892 * Add macOS Big Sur compatibility (#8126) 893 894 JavaScript 895 * Generate `getDescriptor` methods with `*` as their `this` type. 896 * Enforce `let/const` for generated messages. 897 * js/binary/utils.js: Fix jspb.utils.joinUnsignedDecimalString to work with negative bitsLow and low but non-zero bitsHigh parameter. (#8170) 898 899 PHP 900 * Added support for PHP 8. (#8105) 901 * unregister INI entries and fix invalid read on shutdown (#8042) 902 * Fix PhpDoc comments for message accessors to include "|null". (#8136) 903 * fix: convert native PHP floats to single precision (#8187) 904 * Fixed PHP to support field numbers >=2**28. (#8235) 905 * feat: add support for deprecated fields to PHP compiler (#8223) 906 * Protect against stack overflow if the user derives from Message. (#8248) 907 * Fixed clone for Message, RepeatedField, and MapField. (#8245) 908 * Updated upb to allow nonzero offset minutes in JSON timestamps. (#8258) 909 910 Ruby 911 * Added support for Ruby 3. (#8184) 912 * Rewrote the data storage layer to be based on upb_msg objects from the 913 upb library. This should lead to much better parsing performance, 914 particularly for large messages. (#8184). 915 * Fill out JRuby support (#7923) 916 * [Ruby] Fix: (SIGSEGV) gRPC-Ruby issue on Windows. memory alloc infinite 917 recursion/run out of memory (#8195) 918 * Fix jruby support to handle messages nested more than 1 level deep (#8194) 919 920 Java 921 * Avoid possible UnsupportedOperationException when using CodedInputSteam 922 with a direct ByteBuffer. 923 * Make Durations.comparator() and Timestamps.comparator() Serializable. 924 * Add more detailed error information for dynamic message field type 925 validation failure 926 * Removed declarations of functions declared in java_names.h from 927 java_helpers.h. 928 * Now Proto3 Oneof fields have "has" methods for checking their presence in 929 Java. 930 * Annotates Java proto generated *_FIELD_NUMBER constants. 931 * Add -assumevalues to remove JvmMemoryAccessor on Android. 932 933 C# 934 * Fix parsing negative Int32Value that crosses segment boundary (#8035) 935 * Change ByteString to use memory and support unsafe create without copy (#7645) 936 * Optimize MapField serialization by removing MessageAdapter (#8143) 937 * Allow FileDescriptors to be parsed with extension registries (#8220) 938 * Optimize writing small strings (#8149) 939 9402020-11-11 version 3.14.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 941 942 Protocol Compiler 943 * The proto compiler no longer requires a .proto filename when it is not 944 generating code. 945 * Added flag `--deterministic_output` to `protoc --encode=...`. 946 * Fixed deadlock when using google.protobuf.Any embedded in aggregate options. 947 948 C++ 949 * Arenas are now unconditionally enabled. cc_enable_arenas no longer has 950 any effect. 951 * Removed inlined string support, which is incompatible with arenas. 952 * Fix a memory corruption bug in reflection when mixing optional and 953 non-optional fields. 954 * Make SpaceUsed() calculation more thorough for map fields. 955 * Add stack overflow protection for text format with unknown field values. 956 * FieldPath::FollowAll() now returns a bool to signal if an out-of-bounds 957 error was encountered. 958 * Performance improvements for Map. 959 * Minor formatting fix when dumping a descriptor to .proto format with 960 DebugString. 961 * UBSAN fix in RepeatedField (#2073). 962 * When running under ASAN, skip a test that makes huge allocations. 963 * Fixed a crash that could happen when creating more than 256 extensions in 964 a single message. 965 * Fix a crash in BuildFile when passing in invalid descriptor proto. 966 * Parser security fix when operating with CodedInputStream. 967 * Warn against the use of AllowUnknownExtension. 968 * Migrated to C++11 for-range loops instead of index-based loops where 969 possible. This fixes a lot of warnings when compiling with -Wsign-compare. 970 * Fix segment fault for proto3 optional (#7805) 971 * Adds a CMake option to build `libprotoc` separately (#7949) 972 973 Java 974 * Bugfix in mergeFrom() when a oneof has multiple message fields. 975 * Fix RopeByteString.RopeInputStream.read() returning -1 when told to read 976 0 bytes when not at EOF. 977 * Redefine remove(Object) on primitive repeated field Lists to avoid 978 autoboxing. 979 * Support "\u" escapes in textformat string literals. 980 * Trailing empty spaces are no longer ignored for FieldMask. 981 * Fix FieldMaskUtil.subtract to recursively remove mask. 982 * Mark enums with `@java.lang.Deprecated` if the proto enum has option 983 `deprecated = true;`. 984 * Adding forgotten duration.proto to the lite library (#7738) 985 986 Python 987 * Print google.protobuf.NullValue as null instead of "NULL_VALUE" when it is 988 used outside WKT Value/Struct. 989 * Fix bug occurring when attempting to deep copy an enum type in python 3. 990 * Add a setuptools extension for generating Python protobufs (#7783) 991 * Remove uses of pkg_resources in non-namespace packages. (#7902) 992 * [bazel/py] Omit google/__init__.py from the Protobuf runtime. (#7908) 993 * Removed the unnecessary setuptools package dependency for Python package (#7511) 994 * Fix PyUnknownFields memory leak (#7928) 995 996 PHP 997 * Added support for "==" to the PHP C extension (#7883) 998 * Added `==` operators for Map and Array. (#7900) 999 * Native C well-known types (#7944) 1000 * Optimized away hex2bin() call in generated code (#8006) 1001 * New version of upb, and a new hash function wyhash in third_party. (#8000) 1002 * add missing hasOneof method to check presence of oneof fields (#8003) 1003 1004 Go: 1005 * Update go_package options to reference google.golang.org/protobuf module. 1006 1007 C#: 1008 * annotate ByteString.CopyFrom(ReadOnlySpan<byte>) as SecuritySafeCritical (#7701) 1009 * Fix C# optional field reflection when there are regular fields too (#7705) 1010 * Fix parsing negative Int32Value that crosses segment boundary (#8035) 1011 1012 Javascript: 1013 * JS: parse (un)packed fields conditionally (#7379) 1014 10152020-07-14 version 3.13.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1016 1017 PHP: 1018 * The C extension is completely rewritten. The new C extension has significantly 1019 better parsing performance and fixes a handful of conformance issues. It will 1020 also make it easier to add support for more features like proto2 and proto3 presence. 1021 * The new C extension does not support PHP 5.x. PHP 5.x users can still use pure-PHP. 1022 1023 C++: 1024 * Removed deprecated unsafe arena string accessors 1025 * Enabled heterogeneous lookup for std::string keys in maps. 1026 * Removed implicit conversion from StringPiece to std::string 1027 * Fix use-after-destroy bug when the Map is allocated in the arena. 1028 * Improved the randomness of map ordering 1029 * Added stack overflow protection for text format with unknown fields 1030 * Use std::hash for proto maps to help with portability. 1031 * Added more Windows macros to proto whitelist. 1032 * Arena constructors for map entry messages are now marked "explicit" 1033 (for regular messages they were already explicit). 1034 * Fix subtle aliasing bug in RepeatedField::Add 1035 * Fix mismatch between MapEntry ByteSize and Serialize with respect to unset 1036 fields. 1037 1038 Python: 1039 * JSON format conformance fixes: 1040 * Reject lowercase t for Timestamp json format. 1041 * Print full_name directly for extensions (no camelCase). 1042 * Reject boolean values for integer fields. 1043 * Reject NaN, Infinity, -Infinity that is not quoted. 1044 * Base64 fixes for bytes fields: accept URL-safe base64 and missing padding. 1045 * Bugfix for fields/files named "async" or "await". 1046 * Improved the error message when AttributeError is returned from __getattr__ 1047 in EnumTypeWrapper. 1048 1049 Java: 1050 * Fixed a bug where setting optional proto3 enums with setFooValue() would 1051 not mark the value as present. 1052 * Add Subtract function to FieldMaskUtil. 1053 1054 C#: 1055 * Dropped support for netstandard1.0 (replaced by support for netstandard1.1). 1056 This was required to modernize the parsing stack to use the `Span<byte>` 1057 type internally. (#7351) 1058 * Add `ParseFrom(ReadOnlySequence<byte>)` method to enable GC friendly 1059 parsing with reduced allocations and buffer copies. (#7351) 1060 * Add support for serialization directly to a `IBufferWriter<byte>` or 1061 to a `Span<byte>` to enable GC friendly serialization. 1062 The new API is available as extension methods on the `IMessage` type. (#7576) 1063 * Add `GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE` define to make 1064 generated code compatible with old C# compilers (pre-roslyn compilers 1065 from .NET framework and old versions of mono) that do not support 1066 ref structs. Users that are still on a legacy stack that does 1067 not support C# 7.2 compiler might need to use the new define 1068 in their projects to be able to build the newly generated code. (#7490) 1069 * Due to the major overhaul of parsing and serialization internals (#7351 and #7576), 1070 it is recommended to regenerate your generated code to achieve the best 1071 performance (the legacy generated code will still work, but might incur 1072 a slight performance penalty). 1073 10742020-07-28 version 3.12.4 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1075 1076This release contains no significant changes, but exists because 3.12.3 was 1077mistakenly tagged at the wrong commit. 1078 10792020-06-01 version 3.12.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1080 1081 Objective-C 1082 * Tweak the union used for Extensions to support old generated code. #7573 1083 10842020-05-26 version 3.12.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1085 1086 C++ 1087 * Simplified the template export macros to fix the build for mingw32. (#7539) 1088 1089 Objective-C 1090 * Fix for the :protobuf_objc target in the Bazel BUILD file. (#7538) 1091 10922020-05-20 version 3.12.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1093 1094 Ruby 1095 * Re-add binary gems for Ruby 2.3 and 2.4. These are EOL upstream, however 1096 many people still use them and dropping support will require more 1097 coordination. 1098 10992020-05-12 version 3.12.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1100 1101 Protocol Compiler 1102 * [experimental] Singular, non-message typed fields in proto3 now support 1103 presence tracking. This is enabled by adding the "optional" field label and 1104 passing the --experimental_allow_proto3_optional flag to protoc. 1105 * For usage info, see docs/field_presence.md. 1106 * During this experimental phase, code generators should update to support 1107 proto3 presence, see docs/implementing_proto3_presence.md for instructions. 1108 * Allow duplicate symbol names when multiple descriptor sets are passed on 1109 the command-line, to match the behavior when multiple .proto files are passed. 1110 * Deterministic `protoc --descriptor_set_out` (#7175) 1111 1112 C++ 1113 * [experimental] Added proto3 presence support. 1114 * New descriptor APIs to support proto3 presence. 1115 * Enable Arenas by default on all .proto files. 1116 * Documented that users are not allowed to subclass Message or MessageLite. 1117 * Mark generated classes as final; inheriting from protos is strongly discouraged. 1118 * Add stack overflow protection for text format with unknown fields. 1119 * Add accessors for map key and value FieldDescriptors. 1120 * Add FieldMaskUtil::FromFieldNumbers(). 1121 * MessageDifferencer: use ParsePartial() on Any fields so the diff does not 1122 fail when there are missing required fields. 1123 * ReflectionOps::Merge(): lookup messages in the right factory, if it can. 1124 * Added Descriptor::WellKnownTypes enum and Descriptor::well_known_type() 1125 accessor as an easier way of determining if a message is a Well-Known Type. 1126 * Optimized RepeatedField::Add() when it is used in a loop. 1127 * Made proto move/swap more efficient. 1128 * De-virtualize the GetArena() method in MessageLite. 1129 * Improves performance of json_stream_parser.cc by factor 1000 (#7230) 1130 * bug: #7076 undefine Windows OUT and OPTIONAL macros (#7087) 1131 * Fixed a bug in FieldDescriptor::DebugString() that would erroneously print 1132 an "optional" label for a field in a oneof. 1133 * Fix bug in parsing bool extensions that assumed they are always 1 byte. 1134 * Fix off-by-one error in FieldOptions::ByteSize() when extensions are present. 1135 * Clarified the comments to show an example of the difference between 1136 Descriptor::extension and DescriptorPool::FindAllExtensions. 1137 * Add a compiler option 'code_size' to force optimize_for=code_size on all 1138 protos where this is possible. 1139 1140 Java 1141 * [experimental] Added proto3 presence support. 1142 * Mark java enum _VALUE constants as @Deprecated if the enum field is deprecated 1143 * reduce <clinit> size for enums with allow_alias set to true. 1144 * Sort map fields alphabetically by the field's key when printing textproto. 1145 * Fixed a bug in map sorting that appeared in -rc1 and -rc2 (#7508). 1146 * TextFormat.merge() handles Any as top level type. 1147 * Throw a descriptive IllegalArgumentException when calling 1148 getValueDescriptor() on enum special value UNRECOGNIZED instead of 1149 ArrayIndexOutOfBoundsException. 1150 * Fixed an issue with JsonFormat.printer() where setting printingEnumsAsInts() 1151 would override the configuration passed into includingDefaultValueFields(). 1152 * Implement overrides of indexOf() and contains() on primitive lists returned 1153 for repeated fields to avoid autoboxing the list contents. 1154 * Add overload to FieldMaskUtil.fromStringList that accepts a descriptor. 1155 * [bazel] Move Java runtime/toolchains into //java (#7190) 1156 1157 Python 1158 * [experimental] Added proto3 presence support. 1159 * [experimental] fast import protobuf module, only works with cpp generated code linked in. 1160 * Truncate 'float' fields to 4 bytes of precision in setters for pure-Python 1161 implementation (C++ extension was already doing this). 1162 * Fixed a memory leak in C++ bindings. 1163 * Added a deprecation warning when code tries to create Descriptor objects 1164 directly. 1165 * Fix unintended comparison between bytes and string in descriptor.py. 1166 * Avoid printing excess digits for float fields in TextFormat. 1167 * Remove Python 2.5 syntax compatibility from the proto compiler generated _pb2.py module code. 1168 * Drop 3.3, 3.4 and use single version docker images for all python tests (#7396) 1169 1170 JavaScript 1171 * Fix js message pivot selection (#6813) 1172 1173 PHP 1174 * Persistent Descriptor Pool (#6899) 1175 * Implement lazy loading of php class for proto messages (#6911) 1176 * Correct @return in Any.unpack docblock (#7089) 1177 * Ignore unknown enum value when ignore_unknown specified (#7455) 1178 1179 Ruby 1180 * [experimental] Implemented proto3 presence for Ruby. (#7406) 1181 * Stop building binary gems for ruby <2.5 (#7453) 1182 * Fix for wrappers with a zero value (#7195) 1183 * Fix for JSON serialization of 0/empty-valued wrapper types (#7198) 1184 * Call "Class#new" over rb_class_new_instance in decoding (#7352) 1185 * Build extensions for Ruby 2.7 (#7027) 1186 * assigning 'nil' to submessage should clear the field. (#7397) 1187 1188 C# 1189 * [experimental] Add support for proto3 presence fields in C# (#7382) 1190 * Mark GetOption API as obsolete and expose the "GetOptions()" method on descriptors instead (#7491) 1191 * Remove Has/Clear members for C# message fields in proto2 (#7429) 1192 * Enforce recursion depth checking for unknown fields (#7132) 1193 * Fix conformance test failures for Google.Protobuf (#6910) 1194 * Cleanup various bits of Google.Protobuf (#6674) 1195 * Fix latest ArgumentException for C# extensions (#6938) 1196 * Remove unnecessary branch from ReadTag (#7289) 1197 1198 Objective-C 1199 * [experimental] ObjC Proto3 optional support (#7421) 1200 * Block subclassing of generated classes (#7124) 1201 * Use references to Obj C classes instead of names in descriptors. (#7026) 1202 * Revisit how the WKTs are bundled with ObjC. (#7173) 1203 1204 Other 1205 * Add a proto_lang_toolchain for javalite (#6882) 1206 * [bazel] Update gtest and deprecate //external:{gtest,gtest_main} (#7237) 1207 * Add application note for explicit presence tracking. (#7390) 1208 * Howto doc for implementing proto3 presence in a code generator. (#7407) 1209 1210 12112020-02-14 version 3.11.4 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1212 1213 C# 1214 * Fix latest ArgumentException for C# extensions (#7188) 1215 * Enforce recursion depth checking for unknown fields (#7210) 1216 1217 Ruby 1218 * Fix wrappers with a zero value (#7195) 1219 * Fix JSON serialization of 0/empty-valued wrapper types (#7198) 1220 12212020-01-31 version 3.11.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1222 1223 C++ 1224 * Add OUT and OPTIONAL to windows portability files (#7087) 1225 1226 PHP 1227 * Refactored ulong to zend_ulong for php7.4 compatibility (#7147) 1228 * Call register_class before getClass from desc to fix segfault (#7077) 1229 1230 12312019-12-10 version 3.11.2 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1232 1233 PHP 1234 * Make c extension portable for php 7.4 (#6968) 1235 1236 12372019-12-02 version 3.11.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1238 1239 PHP 1240 * Extern declare protobuf_globals (#6946) 1241 1242 12432019-11-19 version 3.11.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1244 1245 C++ 1246 * Make serialization method naming consistent 1247 * Make proto runtime + generated code free of deprecation warnings 1248 * 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 1249 * Removed non-namespace macro EXPECT_OK() 1250 * Removed mathlimits.h from stubs in favor of using std::numeric_limits from C++11 1251 * Fixed bug in parser when ending on a group tag 1252 * Add a helper function to UnknownFieldSet to deal with the changing return value of message::unknown_fields() 1253 * Fix incorrect use of string_view iterators 1254 * Support direct pickling of nested messages 1255 * Skip extension tag validation for MessageSet if unknown dependencies are allowed 1256 * Updated deprecation macros to annotate deprecated code (#6612) 1257 * Remove conversion warning in MapEntryFuncs::ByteSizeLong (#6766) 1258 * Revert "Make shared libraries be able to link to MSVC static runtime libraries, so that VC runtime is not required." (#6914) 1259 1260 Java 1261 * Remove the usage of MethodHandle, so that Android users prior to API version 26 can use protobuf-java 1262 * Publish ProGuard config for javalite 1263 * Fix for StrictMode disk read violation in ExtensionRegistryLite 1264 * Include part of the ByteString's content in its toString(). 1265 * Include unknown fields when merging proto3 messages in Java lite builders 1266 1267 Python 1268 * Add float_precision option in json format printer 1269 * Optionally print bytes fields as messages in unknown fields, if possible 1270 * FieldPath: fix testing IsSet on root path '' 1271 * Experimental code gen (fast import protobuf module) which only work with cpp generated code linked in 1272 1273 JavaScript 1274 * Remove guard for Symbol iterator for jspb.Map 1275 1276 PHP 1277 * Avoid too much overhead in layout_init (#6716) 1278 * Lazily Create Singular Wrapper Message (#6833) 1279 * Implement lazy loading of php class for proto messages (#6911) 1280 1281 Ruby 1282 * Ruby lazy wrappers optimization (#6797) 1283 1284 C# 1285 * (RepeatedField): Capacity property to resize the internal array (#6530) 1286 * Experimental proto2 support is now officially available (#4642, #5183, #5350, #5936) 1287 * Getting started doc: https://github.com/protocolbuffers/protobuf/blob/master/docs/csharp/proto2.md 1288 * Add length checks to ExtensionCollection (#6759) 1289 * Optimize parsing of some primitive and wrapper types (#6843) 1290 * Use 3 parameter Encoding.GetString for default string values (#6828) 1291 * Change _Extensions property to normal body rather than expression (#6856) 1292 1293 Objective C 1294 * Fixed unaligned reads for 32bit arm with newer Xcode versions (#6678) 1295 1296 12972019-09-03 version 3.10.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1298 1299 C++ 1300 * Switch the proto parser to the faster MOMI parser. 1301 * Properly escape Struct keys in the proto3 JSON serializer. 1302 * Fix crash on uninitialized map entries. 1303 * Informed the compiler of has-bit invariant to produce better code 1304 * Unused imports of files defining descriptor extensions will now be reported 1305 * Add proto2::util::RemoveSubranges to remove multiple subranges in linear time. 1306 * Added BaseTextGenerator::GetCurrentIndentationSize() 1307 * Made implicit weak fields compatible with the Apple linker 1308 * Support 32 bit values for ProtoStreamObjectWriter to Struct. 1309 * Removed the internal-only header coded_stream_inl.h and the internal-only methods defined there. 1310 * Enforced no SWIG wrapping of descriptor_database.h (other headers already had this restriction). 1311 * Implementation of the equivalent of the MOMI parser for serialization. This removes one of the two serialization routines, by making the fast array serialization routine completely general. SerializeToCodedStream can now be implemented in terms of the much much faster array serialization. The array serialization regresses slightly, but when array serialization is not possible this wins big. 1312 * Do not convert unknown field name to snake case to accurately report error. 1313 * Fix a UBSAN warnings. (#6333) 1314 * Add podspec for C++ (#6404) 1315 * protoc: fix source code info location for missing label (#6436) 1316 * C++ Add move constructor for Reflection's SetString (#6477) 1317 1318 Java 1319 * Call loadDescriptor outside of synchronized block to remove one possible source of deadlock. 1320 * Have oneof enums implement a separate interface (other than EnumLite) for clarity. 1321 * Opensource Android Memory Accessors 1322 * Update TextFormat to make use of the new TypeRegistry. 1323 * Support getFieldBuilder and getRepeatedFieldBuilder in ExtendableBuilder 1324 * Update JsonFormat to make use of the new TypeRegistry. 1325 * Add proguard config generator for GmmBenchmarkSuiteLite. 1326 * Change ProtobufArrayList to use Object[] instead of ArrayList for 5-10% faster parsing 1327 * Implement ProtobufArrayList.add(E) for 20% (5%-40%) faster overall protolite2 parsing 1328 * Make a copy of JsonFormat.TypeRegistry at the protobuf top level package. This will eventually replace JsonFormat.TypeRegistry. 1329 * Fix javadoc warnings in generated files (#6231) 1330 * Java: Add Automatic-Module-Name entries to the Manifest (#6568) 1331 1332 Python 1333 * Add descriptor methods in descriptor_pool are deprecated. 1334 * Uses explicit imports to prevent multithread test failures in py3. 1335 * Added __delitem__ for Python extension dict 1336 * Update six version to 1.12.0 and fix legacy_create_init issue (#6391) 1337 1338 JavaScript 1339 * Remove deprecated boolean option to getResultBase64String(). 1340 * Fix sint64 zig-zag encoding. 1341 * Simplify hash64 string conversion to avoid DIGIT array. Should reduce overhead if these functions aren't used, and be more efficient by avoiding linear array searches. 1342 * Change the parameter types of binaryReaderFn in ExtensionFieldBinaryInfo to (number, ?, ?). 1343 * Create dates.ts and time_of_days.ts to mirror Java versions. This is a near-identical conversion of c.g.type.util.{Dates,TimeOfDays} respectively. 1344 * Migrate moneys to TypeScript. 1345 1346 PHP 1347 * Fix incorrect leap day for Timestamp (#6696) 1348 * Initialize well known type values (#6713) 1349 1350 Ruby 1351 * Fix scope resolution for Google namespace (#5878) 1352 * Support hashes for struct initializers (#5716) 1353 * Optimized away the creation of empty string objects. (#6502) 1354 * Roll forward Ruby upb changes now that protobuf Ruby build is fixed (#5866) 1355 * Optimized layout_mark() for Ruby (#6521) 1356 * Optimization for layout_init() (#6547) 1357 * Fix for GC of Ruby map frames. (#6533) 1358 * Fixed leap year handling by reworking upb_mktime() -> upb_timegm(). (#6695) 1359 1360 Objective C 1361 * Remove OSReadLittle* due to alignment requirements (#6678) 1362 * Don't use unions and instead use memcpy for the type swaps. (#6672) 1363 1364 Other 1365 * Override CocoaPods module to lowercase (#6464) 1366 1367 13682019-06-28 version 3.9.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1369 1370 C++ 1371 * Optimize and simplify implementation of RepeatedPtrFieldBase 1372 * Don't create unnecessary unknown field sets. 1373 * Remove branch from accessors to repeated field element array. 1374 * Added delimited parse and serialize util. 1375 * Reduce size by not emitting constants for fieldnumbers 1376 * Fix a bug when comparing finite and infinite field values with explicit tolerances. 1377 * TextFormat::Parser should use a custom Finder to look up extensions by number if one is provided. 1378 * Add MessageLite::Utf8DebugString() to make MessageLite more compatible with Message. 1379 * Fail fast for better performance in DescriptorPool::FindExtensionByNumber() if descriptor has no defined extensions. 1380 * Adding the file name to help debug colliding extensions 1381 * Added FieldDescriptor::PrintableNameForExtension() and DescriptorPool::FindExtensionByPrintableName(). 1382 The latter will replace Reflection::FindKnownExtensionByName(). 1383 * Replace NULL with nullptr 1384 * Created a new Add method in repeated field that allows adding a range of elements all at once. 1385 * Enabled enum name-to-value mapping functions for C++ lite 1386 * Avoid dynamic initialization in descriptor.proto generated code 1387 * Move stream functions to MessageLite from Message. 1388 * Move all zero_copy_stream functionality to io_lite. 1389 * Do not create array of matched fields for simple repeated fields 1390 * Enabling silent mode by default to reduce make compilation noise. (#6237) 1391 1392 Java 1393 * Expose TextFormat.Printer and make it configurable. Deprecate the static methods. 1394 * Library for constructing google.protobuf.Struct and google.protobuf.Value 1395 * Make OneofDescriptor extend GenericDescriptor. 1396 * Expose streamingness of service methods from MethodDescriptor. 1397 * Fix a bug where TextFormat fails to parse Any filed with > 1 embedded message sub-fields. 1398 * Establish consistent JsonFormat behavior for nulls in oneofs, regardless of order. 1399 * Update GSON version to 3.8.5. (#6268) 1400 * Add `protobuf_java_lite` Bazel target. (#6177) 1401 1402 Python 1403 * Change implementation of Name() for enums that allow aliases in proto2 in Python 1404 to be in line with claims in C++ implementation (to return first value). 1405 * Explicitly say what field cannot be set when the new value fails a type check. 1406 * Duplicate register in descriptor pool will raise errors 1407 * Add __slots__ to all well_known_types classes, custom attributes are not allowed anymore. 1408 * text_format only present 8 valid digits for float fields by default 1409 1410 JavaScript 1411 * Add Oneof enum to the list of goog.provide 1412 1413 PHP 1414 * Make php message class final to avoid mocking. (#6277) 1415 * Rename get/setXXXValue to get/setXXXWrapper. (#6295) 1416 1417 Ruby 1418 * Remove to_hash methods. (#6166) 1419 1420 14212019-04-29 version 3.8.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1422 1423 C++ 1424 * Use std::atomic<int32> in case of myriad2 platform 1425 * Always declare enums to be int-sized 1426 * Added DebugString() and ShortDebugString() methods on MessageLite 1427 * Specialized different parse loop control flows 1428 * Make hasbits potentially in register. The or's start forming an obstacle because it's a read modify store on the same mem address on each iteration. 1429 * Move to an internal MACRO for parser validity checks. 1430 * Improve map parsing performance. 1431 * Make MergePartialFromCodedStream non virtual. This allows direct calls, potential inlining and is also a code health improvement 1432 * Add an overall limit to parse_context to prevent reading past it. This allows to remove a annoying level of indirection. 1433 * Fix a mistake, we shouldn't verify map key/value strings for utf8 in opt mode for proto2. 1434 * Further improvements to cut binary size. 1435 * Prepare to make MergePartialFromCodedStream non-virtual. 1436 * A report on some interesting behavior change in python (caused by b/27494216) made me realize there is a check that needs to be done in case the parse ended on a end group tag. 1437 * Add a note of caution to the comments around skip in CodedOutputStream. 1438 * Simplify end check. 1439 * Add overload for ParseMessage for MessageLite/Message types. If the explicit type is not known inlining won't help de-virtualizing the virtual call. 1440 * Reduce linker input. It turns out that ParseMessage is not inlined, producing template instantiations that are used only once and save nothing but cost more. 1441 * Improve the parser. 1442 * [c++17] Changed proto2::RepeatedPtrField iterators to no longer derive from the deprecated std::iterator class. 1443 * Change the default value of case_insensitive_enum_parsing to false for JsonStringToMessage. 1444 * Add a warning if a field name doesn't match the style guide. 1445 * Fix TextFormat not round-trip correctly when float value is max float. 1446 * Added locationed info for some errors at compiler 1447 * Python reserved keywords are now working with getattr()/setattr() for most descriptors. 1448 * Added AllowUnknownField() in text_format 1449 * Append '_' to C++ reserved keywords for message, enum, extension 1450 * Fix MSVC warning C4244 in protobuf's parse_context.h. 1451 * Updating Iterators to be compatible with C++17 in MSVC. 1452 * Use capability annotation in mutex.h 1453 * Fix "UndefinedBehaviorSanitizer: cfi-bad-type" 1454 * CriticalSectionLock class as a lightweight replacement for std::mutex on Windows platforms. 1455 * Removed vestigial wire_format_lite_inl.h 1456 1457 C# 1458 * Added System.Memory dependency. 1459 1460 Java 1461 * Make Java protoc code generator ignore optimize_for LITE_RUNTIME. Users should instead use the Java lite protoc plugin. 1462 * Change Extension getMessageDefaultInstance() to return Message instead of MessageLite. 1463 * Prevent malicious input streams from leaking buffers for ByteString or ByteBuffer parsing. 1464 * Release new Javalite runtime. 1465 * Show warning in case potential file name conflict. 1466 * Allow Java reserved keywords to be used in extensions. 1467 * Added setAllowUnknownFields() in text format 1468 * Add memoization to ExtensionRegistryLite.getEmptyRegistry() 1469 * Improve performance of CodedOutputStream.writeUInt32NoTag 1470 * Add an optimized mismatch-finding algorithm to UnsafeUtil. 1471 * When serializing uint32 varints, check that we have MAX_VARINT32_SIZE bytes left, not just MAX_VARINT_SIZE. 1472 * Minor optimization to RopeByteString.PieceIterator 1473 1474 JavaScript 1475 * Simplify generated toObject code when the default value is used. 1476 1477 Python 1478 * Changes implementation of Name() for enums that allow aliases in proto2 in Python to be in line with claims in C++ implementation (to return first value). 1479 * Added double_format option in text format printer. 1480 * Added iter and __contains__ to extension dict 1481 * Added allow_unknown_field option in python text format parser 1482 * Fixed Timestamp.ToDatetime() loses precision issue 1483 * Support unknown field in text format printer. 1484 * Float field will be convert to inf if bigger than struct.unpack('f', b'\xff\xff\x7f\x7f')[0] which is about 3.4028234664e+38, 1485 convert to -inf if smaller than -3.4028234664e+38 1486 * Allowed casting str->bytes in Message.__setstate__ 1487 1488 Ruby 1489 * Helper methods to get enum name for Ruby. 1490 1491 14922019-01-24 version 3.7.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1493 1494 C++ 1495 * Introduced new MOMI (maybe-outside-memory-interval) parser. 1496 * Add an option to json_util to parse enum as case-insensitive. In the future, enum parsing in json_util will become case-sensitive. 1497 * Added conformance test for enum aliases 1498 * Added support for --cpp_out=speed:... 1499 * Added use of C++ override keyword where appropriate 1500 * Many other cleanups and fixes. 1501 1502 Java 1503 * Fix illegal reflective access warning in JDK 9+ 1504 * Add BOM 1505 1506 Python 1507 * Added Python 3.7 compatibility. 1508 * Modified ParseFromString to return bytes parsed . 1509 * Introduce Proto C API. 1510 * FindFileContainingSymbol in descriptor pool is now able to find field and enum values. 1511 * reflection.MakeClass() and reflection.ParseMessage() are deprecated. 1512 * Added DescriptorPool.FindMethodByName() method in pure python (c extension already has it) 1513 * Flipped proto3 to preserve unknown fields by default. 1514 * Added support for memoryview in python3 proto message parsing. 1515 * Added MergeFrom for repeated scalar fields in c extension (pure python already has it) 1516 * Surrogates are now rejected at setters in python3. 1517 * Added public unknown field API. 1518 * RecursionLimit is also set to max if allow_oversize_protos is enabled. 1519 * Disallow duplicate scalars in proto3 text_format parse. 1520 * Fix some segment faults for c extension map field. 1521 1522 PHP 1523 * Most issues for json encoding/decoding in the c extension have been fixed. There are still some edge cases not fixed. For more details, check conformance/failure_list_php_c.txt. 1524 * Supports php 7.3 1525 * Added helper methods to convert between enum values and names. 1526 * Allow setting/getting wrapper message fields using primitive values. 1527 * Various bug fixes. 1528 1529 Ruby 1530 * Ruby 2.6 support. 1531 * Drops support for ruby < 2.3. 1532 * Most issues for json encoding/decoding in the c extension have been fixed. There are still some edge cases not fixed. For more details, check conformance/failure_list_ruby.txt. 1533 * Json parsing can specify an option to ignore unknown fields: msg.decode_json(data, {ignore_unknown_fields: true}). 1534 * Added support for proto2 syntax (partially). 1535 * Various bug fixes. 1536 1537 Csharp 1538 * More support for FieldMask include merge, intersect and more. 1539 * Increasing the default recursion limit to 100. 1540 * Support loading FileDescriptors dynamically. 1541 * Provide access to comments from descriptors. 1542 * Added Any.Is method. 1543 * Compatible with C# 6 1544 * Added IComparable and comparison operators on Timestamp. 1545 1546 Objective C 1547 * Add ability to introspect list of enum values (#4678) 1548 * Copy the value when setting message/data fields (#5215) 1549 * Support suppressing the objc package prefix checks on a list of files (#5309) 1550 * More complete keyword and NSObject method (via categories) checks for field names, can result in more fields being rename, but avoids the collisions at runtime (#5289) 1551 * Small fixes to TextFormat generation for extensions (#5362) 1552 * Provide more details/context in deprecation messages (#5412) 1553 * Array/Dictionary enumeration blocks NS_NOESCAPE annotation for Swift (#5421) 1554 * Properly annotate extensions for ARC when their names imply behaviors (#5427) 1555 * Enum alias name collision improvements (#5480) 1556 1557 15582018-07-27 version 3.6.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1559 1560 C++ 1561 * Introduced workaround for Windows issue with std::atomic and std::once_flag 1562 initialization (#4777, #4773). 1563 1564 PHP 1565 * Added compatibility with PHP 7.3 (#4898). 1566 1567 Ruby 1568 * Fixed Ruby crash involving Any encoding (#4718). 1569 15702018-06-01 version 3.6.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1571 1572 C++ 1573 * Starting from this release, we now require C++11. For those we cannot yet 1574 upgrade to C++11, we will try to keep the 3.5.x branch updated with 1575 critical bug fixes only. If you have any concerns about this, please 1576 comment on issue #2780. 1577 * Moved to C++11 types like std::atomic and std::unique_ptr and away from our 1578 old custom-built equivalents. 1579 * Added support for repeated message fields in lite protos using implicit 1580 weak fields. This is an experimental feature that allows the linker to 1581 strip out more unused messages than previously was possible. 1582 * Fixed SourceCodeInfo for interpreted options and extension range options. 1583 * Fixed always_print_enums_as_ints option for JSON serialization. 1584 * Added support for ignoring unknown enum values when parsing JSON. 1585 * Create std::string in Arena memory. 1586 * Fixed ValidateDateTime to correctly check the day. 1587 * Fixed bug in ZeroCopyStreamByteSink. 1588 * Various other cleanups and fixes. 1589 1590 Java 1591 * Dropped support for Java 6. 1592 * Added a UTF-8 decoder that uses Unsafe to directly decode a byte buffer. 1593 * Added deprecation annotations to generated code for deprecated oneof 1594 fields. 1595 * Fixed map field serialization in DynamicMessage. 1596 * Cleanup and documentation for Java Lite runtime. 1597 * Various other fixes and cleanups 1598 * Fixed unboxed arraylists to handle an edge case 1599 * Improved performance for copying between unboxed arraylists 1600 * Fixed lite protobuf to avoid Java compiler warnings 1601 * Improved test coverage for lite runtime 1602 * Performance improvements for lite runtime 1603 1604 Python 1605 * Fixed bytes/string map key incompatibility between C++ and pure-Python 1606 implementations (issue #4029) 1607 * Added __init__.py files to compiler and util subpackages 1608 * Use /MT for all Windows versions 1609 * Fixed an issue affecting the Python-C++ implementation when used with 1610 Cython (issue #2896) 1611 * Various text format fixes 1612 * Various fixes to resolve behavior differences between the pure-Python and 1613 Python-C++ implementations 1614 1615 PHP 1616 * Added php_metadata_namespace to control the file path of generated metadata 1617 file. 1618 * Changed generated classes of nested message/enum. E.g., Foo.Bar, which 1619 previously generates Foo_Bar, now generates Foo/Bar 1620 * Added array constructor. When creating a message, users can pass a php 1621 array whose content is field name to value pairs into constructor. The 1622 created message will be initialized according to the array. Note that 1623 message field should use a message value instead of a sub-array. 1624 * Various bug fixes. 1625 1626 Objective-C 1627 * We removed some helper class methods from GPBDictionary to shrink the size 1628 of the library, the functionary is still there, but you may need to do some 1629 specific +alloc / -init… methods instead. 1630 * Minor improvements in the performance of object field getters/setters by 1631 avoiding some memory management overhead. 1632 * Fix a memory leak during the raising of some errors. 1633 * Make header importing completely order independent. 1634 * Small code improvements for things the undefined behaviors compiler option 1635 was flagging. 1636 1637 Ruby 1638 * Added ruby_package file option to control the module of generated class. 1639 * Various bug fixes. 1640 1641 Javascript 1642 * Allow setting string to int64 field. 1643 1644 Csharp 1645 * Unknown fields are now parsed and then sent back on the wire. They can be 1646 discarded at parse time via a CodedInputStream option. 1647 * Movement towards working with .NET 3.5 and Unity 1648 * Expression trees are no longer used 1649 * AOT generics issues in Unity/il2cpp have a workaround (see this commit for 1650 details) 1651 * Floating point values are now compared bitwise (affects NaN value 1652 comparisons) 1653 * The default size limit when parsing is now 2GB rather than 64MB 1654 * MessageParser now supports parsing from a slice of a byte array 1655 * JSON list parsing now accepts null values where the underlying proto 1656 representation does 1657 16582017-12-20 version 3.5.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1659 Planned Future Changes 1660 * Make C++ implementation C++11 only: we plan to require C++11 to build 1661 protobuf code starting from 3.6.0 release. Please join this github issue: 1662 https://github.com/protocolbuffers/protobuf/issues/2780 to provide your feedback. 1663 1664 protoc 1665 * Fixed a bug introduced in 3.5.0 and protoc in Windows now accepts non-ascii 1666 characters in paths again. 1667 1668 C++ 1669 * Removed several usages of C++11 features in the code base. 1670 * Fixed some compiler warnings. 1671 1672 PHP 1673 * Fixed memory leak in C-extension implementation. 1674 * Added discardUnknokwnFields API. 1675 * Removed duplicated typedef in C-extension headers. 1676 * Avoided calling private php methods (timelib_update_ts). 1677 * Fixed Any.php to use fully-qualified name for DescriptorPool. 1678 1679 Ruby 1680 * Added Google_Protobuf_discard_unknown for discarding unknown fields in 1681 messages. 1682 1683 C# 1684 * Unknown fields are now preserved by default. 1685 * Floating point values are now bitwise compared, affecting message equality 1686 check and Contains() API in map and repeated fields. 1687 1688 16892017-11-13 version 3.5.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1690 Planned Future Changes 1691 * Make C++ implementation C++11 only: we plan to require C++11 to build 1692 protobuf code starting from 3.6.0 release. Please join this github issue: 1693 https://github.com/protocolbuffers/protobuf/issues/2780 to provide your feedback. 1694 1695 General 1696 * Unknown fields are now preserved in proto3 for most of the language 1697 implementations for proto3 by default. See the per-language section for 1698 details. 1699 * reserve keyword are now supported in enums 1700 1701 C++ 1702 * Proto3 messages are now preserving unknown fields by default. If you rely on 1703 unknowns fields being dropped. Please use DiscardUnknownFields() explicitly. 1704 * Deprecated the unsafe_arena_release_* and unsafe_arena_add_allocated_* 1705 methods for string fields. 1706 * Added move constructor and move assignment to RepeatedField, 1707 RepeatedPtrField and google::protobuf::Any. 1708 * Added perfect forwarding in Arena::CreateMessage 1709 * In-progress experimental support for implicit weak fields with lite protos. 1710 This feature allows the linker to strip out more unused messages and reduce 1711 binary size. 1712 * Various performance optimizations. 1713 1714 Java 1715 * Proto3 messages are now preserving unknown fields by default. If you’d like 1716 to drop unknown fields, please use the DiscardUnknownFieldsParser API. For 1717 example: 1718 Parser<Foo> parser = DiscardUnknownFieldsParser.wrap(Foo.parser()); 1719 Foo foo = parser.parseFrom(input); 1720 * Added a new CodedInputStream decoder for Iterable<ByteBuffer> with direct 1721 ByteBuffers. 1722 * TextFormat now prints unknown length-delimited fields as messages if 1723 possible. 1724 * FieldMaskUtil.merge() no longer creates unnecessary empty messages when a 1725 message field is unset in both source message and destination message. 1726 * Various performance optimizations. 1727 1728 Python 1729 * Proto3 messages are now preserving unknown fields by default. Use 1730 message.DiscardUnknownFields() to drop unknown fields. 1731 * Add FieldDescriptor.file in generated code. 1732 * Add descriptor pool FindOneofByName in pure python. 1733 * Change unknown enum values into unknown field set . 1734 * Add more Python dict/list compatibility for Struct/ListValue. 1735 * Add utf-8 support for text_format.Merge()/Parse(). 1736 * Support numeric unknown enum values for proto3 JSON format. 1737 * Add warning for Unexpected end-group tag in cpp extension. 1738 1739 PHP 1740 * Proto3 messages are now preserving unknown fields. 1741 * Provide well known type messages in runtime. 1742 * Add prefix ‘PB’ to generated class of reserved names. 1743 * Fixed all conformance tests for encode/decode json in php runtime. C 1744 extension needs more work. 1745 1746 Objective-C 1747 * Fixed some issues around copying of messages with unknown fields and then 1748 mutating the unknown fields in the copy. 1749 1750 C# 1751 * Added unknown field support in JsonParser. 1752 * Fixed oneof message field merge. 1753 * Simplify parsing messages from array slices. 1754 1755 Ruby 1756 * Unknown fields are now preserved by default. 1757 * Fixed several bugs for segment fault. 1758 1759 Javascript 1760 * Decoder can handle both paced and unpacked data no matter how the proto is 1761 defined. 1762 * Decoder now accept long varint for 32 bit integers. 1763 1764 17652017-08-14 version 3.4.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1766 Planned Future Changes 1767 * There are some changes that are not included in this release but are planned 1768 for the near future 1769 - Preserve unknown fields in proto3: We are going to bring unknown fields 1770 back into proto3. In this release, some languages start to support 1771 preserving unknown fields in proto3, controlled by flags/options. Some 1772 languages also introduce explicit APIs to drop unknown fields for 1773 migration. Please read the change log sections by languages for details. 1774 For general timeline and plan: 1775 1776 https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view 1777 1778 For issues and discussions: 1779 1780 https://github.com/protocolbuffers/protobuf/issues/272 1781 1782 - Make C++ implementation C++11 only: we plan to require C++11 to build 1783 protobuf code starting from 3.5.0 or 3.6.0 release, after unknown fields 1784 semantic changes are finished. Please join this 1785 github issue: 1786 1787 https://github.com/protocolbuffers/protobuf/issues/2780 1788 1789 to provide your feedback. 1790 1791 General 1792 * Extension ranges now accept options and are customizable. 1793 * "reserve" keyword now supports “max” in field number ranges, 1794 e.g. reserve 1000 to max; 1795 1796 C++ 1797 * Proto3 messages are now able to preserve unknown fields. The default 1798 behavior is still to drop unknowns, which will be flipped in a future 1799 release. If you rely on unknowns fields being dropped. Please use 1800 Message::DiscardUnknownFields() explicitly. 1801 * Packable proto3 fields are now packed by default in serialization. 1802 * Following C++11 features are introduced when C++11 is available: 1803 - move-constructor and move-assignment are introduced to messages 1804 - Repeated fields constructor now takes std::initializer_list 1805 - rvalue setters are introduced for string fields 1806 * Experimental Table-Driven parsing and serialization available to test. To 1807 enable it, pass in table_driven_parsing table_driven_serialization protoc 1808 generator flags for C++ 1809 1810 $ protoc --cpp_out=table_driven_parsing,table_driven_serialization:./ \ 1811 test.proto 1812 1813 * lite generator parameter supported by the generator. Once set, all generated 1814 files, use lite runtime regardless of the optimizer_for setting in the 1815 .proto file. 1816 * Various optimizations to make C++ code more performant on PowerPC platform 1817 * Fixed maps data corruption when the maps are modified by both reflection API 1818 and generated API. 1819 * Deterministic serialization on maps reflection now uses stable sort. 1820 * file() accessors are introduced to various *Descriptor classes to make 1821 writing template function easier. 1822 * ByteSize() and SpaceUsed() are deprecated.Use ByteSizeLong() and 1823 SpaceUsedLong() instead 1824 * Consistent hash function is used for maps in DEBUG and NDEBUG build. 1825 * "using namespace std" is removed from stubs/common.h 1826 * Various performance optimizations and bug fixes 1827 1828 Java 1829 * Introduced new parser API DiscardUnknownFieldsParser in preparation of 1830 proto3 unknown fields preservation change. Users who want to drop unknown 1831 fields should migrate to use this new parser API. For example: 1832 1833 Parser<Foo> parser = DiscardUnknownFieldsParser.wrap(Foo.parser()); 1834 Foo foo = parser.parseFrom(input); 1835 1836 * Introduced new TextFormat API printUnicodeFieldValue() that prints field 1837 value without escaping unicode characters. 1838 * Added Durations.compare(Duration, Duration) and 1839 Timestamps.compare(Timestamp, Timestamp). 1840 * JsonFormat now accepts base64url encoded bytes fields. 1841 * Optimized CodedInputStream to do less copies when parsing large bytes 1842 fields. 1843 * Optimized TextFormat to allocate less memory when printing. 1844 1845 Python 1846 * SerializeToString API is changed to SerializeToString(self, **kwargs), 1847 deterministic parameter is accepted for deterministic serialization. 1848 * Added sort_keys parameter in json format to make the output deterministic. 1849 * Added indent parameter in json format. 1850 * Added extension support in json format. 1851 * Added __repr__ support for repeated field in cpp implementation. 1852 * Added file in FieldDescriptor. 1853 * Added pretty-print filter to text format. 1854 * Services and method descriptors are always printed even if generic_service 1855 option is turned off. 1856 * Note: AppEngine 2.5 is deprecated on June 2017 that AppEngine 2.5 will 1857 never update protobuf runtime. Users who depend on AppEngine 2.5 should use 1858 old protoc. 1859 1860 PHP 1861 * Support PHP generic services. Specify file option php_generic_service=true 1862 to enable generating service interface. 1863 * Message, repeated and map fields setters take value instead of reference. 1864 * Added map iterator in c extension. 1865 * Support json encode/decode. 1866 * Added more type info in getter/setter phpdoc 1867 * Fixed the problem that c extension and php implementation cannot be used 1868 together. 1869 * Added file option php_namespace to use custom php namespace instead of 1870 package. 1871 * Added fluent setter. 1872 * Added descriptor API in runtime for custom encode/decode. 1873 * Various bug fixes. 1874 1875 Objective-C 1876 * Fix for GPBExtensionRegistry copying and add tests. 1877 * Optimize GPBDictionary.m codegen to reduce size of overall library by 46K 1878 per architecture. 1879 * Fix some cases of reading of 64bit map values. 1880 * Properly error on a tag with field number zero. 1881 * Preserve unknown fields in proto3 syntax files. 1882 * Document the exceptions on some of the writing apis. 1883 1884 C# 1885 * Implemented IReadOnlyDictionary<K,V> in MapField<K,V> 1886 * Added TryUnpack method for Any message in addition to Unpack. 1887 * Converted C# projects to MSBuild (csproj) format. 1888 1889 Ruby 1890 * Several bug fixes. 1891 1892 Javascript 1893 * Added support of field option js_type. Now one can specify the JS type of a 1894 64-bit integer field to be string in the generated code by adding option 1895 [jstype = JS_STRING] on the field. 1896 18972017-04-05 version 3.3.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) 1898 Planned Future Changes 1899 * There are some changes that are not included in this release but are 1900 planned for the near future: 1901 - Preserve unknown fields in proto3: please read this doc: 1902 1903 https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view 1904 1905 for the timeline and follow up this github issue: 1906 1907 https://github.com/protocolbuffers/protobuf/issues/272 1908 1909 for discussion. 1910 - Make C++ implementation C++11 only: we plan to require C++11 to build 1911 protobuf code starting from 3.4.0 or 3.5.0 release. Please join this 1912 github issue: 1913 1914 https://github.com/protocolbuffers/protobuf/issues/2780 1915 1916 to provide your feedback. 1917 1918 C++ 1919 * Fixed map fields serialization of DynamicMessage to correctly serialize 1920 both key and value regardless of their presence. 1921 * Parser now rejects field number 0 correctly. 1922 * New API Message::SpaceUsedLong() that’s equivalent to 1923 Message::SpaceUsed() but returns the value in size_t. 1924 * JSON support 1925 - New flag always_print_enums_as_ints in JsonPrintOptions. 1926 - New flag preserve_proto_field_names in JsonPrintOptions. It will instruct 1927 the JSON printer to use the original field name declared in the .proto 1928 file instead of converting them to lowerCamelCase when printing JSON. 1929 - JsonPrintOptions.always_print_primtive_fields now works for oneof message 1930 fields. 1931 - Fixed a bug that doesn’t allow different fields to set the same json_name 1932 value. 1933 - Fixed a performance bug that causes excessive memory copy when printing 1934 large messages. 1935 * Various performance optimizations. 1936 1937 Java 1938 * Map field setters eagerly validate inputs and throw NullPointerExceptions 1939 as appropriate. 1940 * Added ByteBuffer overloads to the generated parsing methods and the Parser 1941 interface. 1942 * proto3 enum's getNumber() method now throws on UNRECOGNIZED values. 1943 * Output of JsonFormat is now locale independent. 1944 1945 Python 1946 * Added FindServiceByName() in the pure-Python DescriptorPool. This works only 1947 for descriptors added with DescriptorPool.Add(). Generated descriptor_pool 1948 does not support this yet. 1949 * Added a descriptor_pool parameter for parsing Any in text_format.Parse(). 1950 * descriptor_pool.FindFileContainingSymbol() now is able to find nested 1951 extensions. 1952 * Extending empty [] to repeated field now sets parent message presence. 1953 1954 PHP 1955 * Added file option php_class_prefix. The prefix will be prepended to all 1956 generated classes defined in the file. 1957 * When encoding, negative int32 values are sign-extended to int64. 1958 * Repeated/Map field setter accepts a regular PHP array. Type checking is 1959 done on the array elements. 1960 * encode/decode are renamed to serializeToString/mergeFromString. 1961 * Added mergeFrom, clear method on Message. 1962 * Fixed a bug that oneof accessor didn’t return the field name that is 1963 actually set. 1964 * C extension now works with php7. 1965 * This is the first GA release of PHP. We guarantee that old generated code 1966 can always work with new runtime and new generated code. 1967 1968 Objective-C 1969 * Fixed help for GPBTimestamp for dates before the epoch that contain 1970 fractional seconds. 1971 * Added GPBMessageDropUnknownFieldsRecursively() to remove unknowns from a 1972 message and any sub messages. 1973 * Addressed a threading race in extension registration/lookup. 1974 * Increased the max message parsing depth to 100 to match the other languages. 1975 * Removed some use of dispatch_once in favor of atomic compare/set since it 1976 needs to be heap based. 1977 * Fixes for new Xcode 8.3 warnings. 1978 1979 C# 1980 * Fixed MapField.Values.CopyTo, which would throw an exception unnecessarily 1981 if provided exactly the right size of array to copy to. 1982 * Fixed enum JSON formatting when multiple names mapped to the same numeric 1983 value. 1984 * Added JSON formatting option to format enums as integers. 1985 * Modified RepeatedField<T> to implement IReadOnlyList<T>. 1986 * Introduced the start of custom option handling; it's not as pleasant as it 1987 might be, but the information is at least present. We expect to extend code 1988 generation to improve this in the future. 1989 * Introduced ByteString.FromStream and ByteString.FromStreamAsync to 1990 efficiently create a ByteString from a stream. 1991 * Added whole-message deprecation, which decorates the class with [Obsolete]. 1992 1993 Ruby 1994 * Fixed Message#to_h for messages with map fields. 1995 * Fixed memcpy() in binary gems to work for old glibc, without breaking the 1996 build for non-glibc libc’s like musl. 1997 1998 Javascript 1999 * Added compatibility tests for version 3.0.0. 2000 * Added conformance tests. 2001 * Fixed serialization of extensions: we need to emit a value even if it is 2002 falsy (like the number 0). 2003 * Use closurebuilder.py in favor of calcdeps.py for compiling JavaScript. 2004 20052017-01-23 version 3.2.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite) 2006 General 2007 * Added protoc version number to protoc plugin protocol. It can be used by 2008 protoc plugin to detect which version of protoc is used with the plugin and 2009 mitigate known problems in certain version of protoc. 2010 2011 C++ 2012 * The default parsing byte size limit has been raised from 64MB to 2GB. 2013 * Added rvalue setters for non-arena string fields. 2014 * Enabled debug logging for Android. 2015 * Fixed a double-free problem when using Reflection::SetAllocatedMessage() 2016 with extension fields. 2017 * Fixed several deterministic serialization bugs: 2018 * MessageLite::SerializeAsString() now respects the global deterministic 2019 serialization flag. 2020 * Extension fields are serialized deterministically as well. Fixed protocol 2021 compiler to correctly report importing-self as an error. 2022 * Fixed FileDescriptor::DebugString() to print custom options correctly. 2023 * Various performance/codesize optimizations and cleanups. 2024 2025 Java 2026 * The default parsing byte size limit has been raised from 64MB to 2GB. 2027 * Added recursion limit when parsing JSON. 2028 * Fixed a bug that enumType.getDescriptor().getOptions() doesn't have custom 2029 options. 2030 * Fixed generated code to support field numbers up to 2^29-1. 2031 2032 Python 2033 * You can now assign NumPy scalars/arrays (np.int32, np.int64) to protobuf 2034 fields, and assigning other numeric types has been optimized for 2035 performance. 2036 * Pure-Python: message types are now garbage-collectable. 2037 * Python/C++: a lot of internal cleanup/refactoring. 2038 2039 PHP (Alpha) 2040 * For 64-bit integers type (int64/uint64/sfixed64/fixed64/sint64), use PHP 2041 integer on 64-bit environment and PHP string on 32-bit environment. 2042 * PHP generated code also conforms to PSR-4 now. 2043 * Fixed ZTS build for c extension. 2044 * Fixed c extension build on Mac. 2045 * Fixed c extension build on 32-bit linux. 2046 * Fixed the bug that message without namespace is not found in the descriptor 2047 pool. (#2240) 2048 * Fixed the bug that repeated field is not iterable in c extension. 2049 * Message names Empty will be converted to GPBEmpty in generated code. 2050 * Added phpdoc in generated files. 2051 * The released API is almost stable. Unless there is large problem, we won't 2052 change it. See 2053 https://developers.google.com/protocol-buffers/docs/reference/php-generated 2054 for more details. 2055 2056 Objective-C 2057 * Added support for push/pop of the stream limit on CodedInputStream for 2058 anyone doing manual parsing. 2059 2060 C# 2061 * No changes. 2062 2063 Ruby 2064 * Message objects now support #respond_to? for field getters/setters. 2065 * You can now compare “message == non_message_object” and it will return false 2066 instead of throwing an exception. 2067 * JRuby: fixed #hashCode to properly reflect the values in the message. 2068 2069 Javascript 2070 * Deserialization of repeated fields no longer has quadratic performance 2071 behavior. 2072 * UTF-8 encoding/decoding now properly supports high codepoints. 2073 * Added convenience methods for some well-known types: Any, Struct, and 2074 Timestamp. These make it easier to convert data between native JavaScript 2075 types and the well-known protobuf types. 2076 20772016-09-23 version 3.1.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite) 2078 General 2079 * Proto3 support in PHP (alpha). 2080 * Various bug fixes. 2081 2082 C++ 2083 * Added MessageLite::ByteSizeLong() that’s equivalent to 2084 MessageLite::ByteSize() but returns the value in size_t. Useful to check 2085 whether a message is over the 2G size limit that protobuf can support. 2086 * Moved default_instances to global variables. This allows default_instance 2087 addresses to be known at compile time. 2088 * Adding missing generic gcc 64-bit atomicops. 2089 * Restore New*Callback into google::protobuf namespace since these are used 2090 by the service stubs code 2091 * JSON support. 2092 * Fixed some conformance issues. 2093 * Fixed a JSON serialization bug for bytes fields. 2094 2095 Java 2096 * Fixed a bug in TextFormat that doesn’t accept empty repeated fields (i.e., 2097 “field: [ ]”). 2098 * JSON support 2099 * Fixed JsonFormat to do correct snake_case-to-camelCase conversion for 2100 non-style-conforming field names. 2101 * Fixed JsonFormat to parse empty Any message correctly. 2102 * Added an option to JsonFormat.Parser to ignore unknown fields. 2103 * Experimental API 2104 * Added UnsafeByteOperations.unsafeWrap(byte[]) to wrap a byte array into 2105 ByteString without copy. 2106 2107 Python 2108 * JSON support 2109 * Fixed some conformance issues. 2110 2111 PHP (Alpha) 2112 * We have added the proto3 support for PHP via both a pure PHP package and a 2113 native c extension. The pure PHP package is intended to provide usability 2114 to wider range of PHP platforms, while the c extension is intended to 2115 provide higher performance. Both implementations provide the same runtime 2116 APIs and share the same generated code. Users don’t need to re-generate 2117 code for the same proto definition when they want to switch the 2118 implementation later. The pure PHP package is included in the php/src 2119 directory, and the c extension is included in the php/ext directory. 2120 2121 Both implementations provide idiomatic PHP APIs: 2122 * All messages and enums are defined as PHP classes. 2123 * All message fields can only be accessed via getter/setter. 2124 * Both repeated field elements and map elements are stored in containers 2125 that act like a normal PHP array. 2126 2127 Unlike several existing third-party PHP implementations for protobuf, our 2128 implementations are built on a "strongly-typed" philosophy: message fields 2129 and array/map containers will throw exceptions eagerly when values of the 2130 incorrect type (not including those that can be type converted, e.g., 2131 double <-> integer <-> numeric string) are inserted. 2132 2133 Currently, pure PHP runtime supports php5.5, 5.6 and 7 on linux. C 2134 extension runtime supports php5.5 and 5.6 on linux. 2135 2136 See php/README.md for more details about installment. See 2137 https://developers.google.com/protocol-buffers/docs/phptutorial for more 2138 details about APIs. 2139 2140 Objective-C 2141 * Helpers are now provided for working the Any well known type (see 2142 GPBWellKnownTypes.h for the api additions). 2143 * Some improvements in startup code (especially when extensions aren’t used). 2144 2145 Javascript 2146 * Fixed missing import of jspb.Map 2147 * Fixed valueWriterFn variable name 2148 2149 Ruby 2150 * Fixed hash computation for JRuby's RubyMessage 2151 * Make sure map parsing frames are GC-rooted. 2152 * Added API support for well-known types. 2153 2154 C# 2155 * Removed check on dependency in the C# reflection API. 2156 21572016-09-06 version 3.0.2 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript/Lite) 2158 General 2159 * Various bug fixes. 2160 2161 Objective C 2162 * Fix for oneofs in proto3 syntax files where fields were set to the zero 2163 value. 2164 * Fix for embedded null character in strings. 2165 * CocoaDocs support 2166 2167 Ruby 2168 * Fixed memory corruption bug in parsing that could occur under GC pressure. 2169 2170 Javascript 2171 * jspb.Map is now properly exported to CommonJS modules. 2172 2173 C# 2174 * Removed legacy_enum_values flag. 2175 2176 21772016-07-27 version 3.0.0 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript/Lite) 2178 General 2179 * This log only contains changes since the beta-4 release. Summarized change 2180 log since the last stable release (v2.6.1) can be found in the github 2181 release page. 2182 2183 Compatibility Notice 2184 * v3.0.0 is the first API stable release of the v3.x series. We do not expect 2185 any future API breaking changes. 2186 * For C++, Java Lite and Objective-C, source level compatibility is 2187 guaranteed. Upgrading from v3.0.0 to newer minor version releases will be 2188 source compatible. For example, if your code compiles against protobuf 2189 v3.0.0, it will continue to compile after you upgrade protobuf library to 2190 v3.1.0. 2191 * For other languages, both source level compatibility and binary level 2192 compatibility are guaranteed. For example, if you have a Java binary built 2193 against protobuf v3.0.0. After switching the protobuf runtime binary to 2194 v3.1.0, your built binary should continue to work. 2195 * Compatibility is only guaranteed for documented API and documented 2196 behaviors. If you are using undocumented API (e.g., use anything in the C++ 2197 internal namespace), it can be broken by minor version releases in an 2198 undetermined manner. 2199 2200 Ruby 2201 * When you assign a string field `a.string_field = "X"`, we now call 2202 #encode(UTF-8) on the string and freeze the copy. This saves you from 2203 needing to ensure the string is already encoded as UTF-8. It also prevents 2204 you from mutating the string after it has been assigned (this is how we 2205 ensure it stays valid UTF-8). 2206 * The generated file for `foo.proto` is now `foo_pb.rb` instead of just 2207 `foo.rb`. This makes it easier to see which imports/requires are from 2208 protobuf generated code, and also prevents conflicts with any `foo.rb` file 2209 you might have written directly in Ruby. It is a backward-incompatible 2210 change: you will need to update all of your `require` statements. 2211 * For package names like `foo_bar`, we now translate this to the Ruby module 2212 `FooBar`. This is more idiomatic Ruby than what we used to do (`Foo_bar`). 2213 2214 JavaScript 2215 * Scalar fields like numbers and boolean now return defaults instead of 2216 `undefined` or `null` when they are unset. You can test for presence 2217 explicitly by calling `hasFoo()`, which we now generate for scalar fields. 2218 2219 Java Lite 2220 * Java Lite is now implemented as a separate plugin, maintained in the 2221 `javalite` branch. Both lite runtime and protoc artifacts will be available 2222 in Maven. 2223 2224 C# 2225 * Target platforms now .NET 4.5, selected portable subsets and .NET Core. 2226 * legacy_enum_values option is no longer supported. 2227 22282016-07-15 version 3.0.0-beta-4 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript) 2229 General 2230 * Added a deterministic serialization API for C++. The deterministic 2231 serialization guarantees that given a binary, equal messages will be 2232 serialized to the same bytes. This allows applications like MapReduce to 2233 group equal messages based on the serialized bytes. The deterministic 2234 serialization is, however, NOT canonical across languages; it is also 2235 unstable across different builds with schema changes due to unknown fields. 2236 Users who need canonical serialization, e.g. persistent storage in a 2237 canonical form, fingerprinting, etc, should define their own 2238 canonicalization specification and implement the serializer using reflection 2239 APIs rather than relying on this API. 2240 * Added OneofOptions. You can now define custom options for oneof groups. 2241 import "google/protobuf/descriptor.proto"; 2242 extend google.protobuf.OneofOptions { 2243 optional int32 my_oneof_extension = 12345; 2244 } 2245 message Foo { 2246 oneof oneof_group { 2247 (my_oneof_extension) = 54321; 2248 ... 2249 } 2250 } 2251 2252 C++ (beta) 2253 * Introduced a deterministic serialization API in 2254 CodedOutputStream::SetSerializationDeterministic(bool). See the notes about 2255 deterministic serialization in the General section. 2256 * Added google::protobuf::Map::swap() to swap two map fields. 2257 * Fixed a memory leak when calling Reflection::ReleaseMessage() on a message 2258 allocated on arena. 2259 * Improved error reporting when parsing text format protos. 2260 * JSON 2261 - Added a new parser option to ignore unknown fields when parsing JSON. 2262 - Added convenient methods for message to/from JSON conversion. 2263 * Various performance optimizations. 2264 2265 Java (beta) 2266 * File option "java_generate_equals_and_hash" is now deprecated. equals() and 2267 hashCode() methods are generated by default. 2268 * Added a new JSON printer option "omittingInsignificantWhitespace" to produce 2269 a more compact JSON output. The printer will pretty-print by default. 2270 * Updated Java runtime to be compatible with 2.5.0/2.6.1 generated protos. 2271 2272 Python (beta) 2273 * Added support to pretty print Any messages in text format. 2274 * Added a flag to ignore unknown fields when parsing JSON. 2275 * Bugfix: "@type" field of a JSON Any message is now correctly put before 2276 other fields. 2277 2278 Objective-C (beta) 2279 * Updated the code to support compiling with more compiler warnings 2280 enabled. (Issue 1616) 2281 * Exposing more detailed errors for parsing failures. (PR 1623) 2282 * Small (breaking) change to the naming of some methods on the support classes 2283 for map<>. There were collisions with the system provided KVO support, so 2284 the names were changed to avoid those issues. (PR 1699) 2285 * Fixed for proper Swift bridging of error handling during parsing. (PR 1712) 2286 * Complete support for generating sources that will go into a Framework and 2287 depend on generated sources from other Frameworks. (Issue 1457) 2288 2289 C# (beta) 2290 * RepeatedField optimizations. 2291 * Support for .NET Core. 2292 * Minor bug fixes. 2293 * Ability to format a single value in JsonFormatter (advanced usage only). 2294 * Modifications to attributes applied to generated code. 2295 2296 Javascript (alpha) 2297 * Maps now have a real map API instead of being treated as repeated fields. 2298 * Well-known types are now provided in the google-protobuf package, and the 2299 code generator knows to require() them from that package. 2300 * Bugfix: non-canonical varints are correctly decoded. 2301 2302 Ruby (alpha) 2303 * Accessors for oneof fields now return default values instead of nil. 2304 2305 Java Lite 2306 * Java lite support is removed from protocol compiler. It will be supported 2307 as a protocol compiler plugin in a separate code branch. 2308 23092016-05-16 version 3.0.0-beta-3 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript) 2310 General 2311 * Supported Proto3 lite-runtime in C++/Java for mobile platforms. 2312 * Any type now supports APIs to specify prefixes other than 2313 type.googleapis.com 2314 * Removed javanano_use_deprecated_package option; Nano will always has its own 2315 ".nano" package. 2316 2317 C++ (Beta) 2318 * Improved hash maps. 2319 - Improved hash maps comments. In particular, please note that equal hash 2320 maps will not necessarily have the same iteration order and 2321 serialization. 2322 - Added a new hash maps implementation that will become the default in a 2323 later release. 2324 * Arenas 2325 - Several inlined methods in Arena were moved to out-of-line to improve 2326 build performance and code size. 2327 - Added SpaceAllocatedAndUsed() to report both space used and allocated 2328 - Added convenient class UnsafeArenaAllocatedRepeatedPtrFieldBackInserter 2329 * Any 2330 - Allow custom type URL prefixes in Any packing. 2331 - TextFormat now expand the Any type rather than printing bytes. 2332 * Performance optimizations and various bug fixes. 2333 2334 Java (Beta) 2335 * Introduced an ExperimentalApi annotation. Annotated APIs are experimental 2336 and are subject to change in a backward incompatible way in future releases. 2337 * Introduced zero-copy serialization as an ExperimentalApi 2338 - Introduction of the `ByteOutput` interface. This is similar to 2339 `OutputStream` but provides semantics for lazy writing (i.e. no 2340 immediate copy required) of fields that are considered to be immutable. 2341 - `ByteString` now supports writing to a `ByteOutput`, which will directly 2342 expose the internals of the `ByteString` (i.e. `byte[]` or `ByteBuffer`) 2343 to the `ByteOutput` without copying. 2344 - `CodedOutputStream` now supports writing to a `ByteOutput`. `ByteString` 2345 instances that are too large to fit in the internal buffer will be 2346 (lazily) written to the `ByteOutput` directly. 2347 - This allows applications using large `ByteString` fields to avoid 2348 duplication of these fields entirely. Such an application can supply a 2349 `ByteOutput` that chains together the chunks received from 2350 `CodedOutputStream` before forwarding them onto the IO system. 2351 * Other related changes to `CodedOutputStream` 2352 - Additional use of `sun.misc.Unsafe` where possible to perform fast 2353 access to `byte[]` and `ByteBuffer` values and avoiding unnecessary 2354 range checking. 2355 - `ByteBuffer`-backed `CodedOutputStream` now writes directly to the 2356 `ByteBuffer` rather than to an intermediate array. 2357 * Improved lite-runtime. 2358 - Lite protos now implement deep equals/hashCode/toString 2359 - Significantly improved the performance of Builder#mergeFrom() and 2360 Builder#mergeDelimitedFrom() 2361 * Various bug fixes and small feature enhancement. 2362 - Fixed stack overflow when in hashCode() for infinite recursive oneofs. 2363 - Fixed the lazy field parsing in lite to merge rather than overwrite. 2364 - TextFormat now supports reporting line/column numbers on errors. 2365 - Updated to add appropriate @Override for better compiler errors. 2366 2367 Python (Beta) 2368 * Added JSON format for Any, Struct, Value and ListValue 2369 * [ ] is now accepted for both repeated scalar fields and repeated message 2370 fields in text format parser. 2371 * Numerical field name is now supported in text format. 2372 * Added DiscardUnknownFields API for python protobuf message. 2373 2374 Objective-C (Beta) 2375 * Proto comments now come over as HeaderDoc comments in the generated sources 2376 so Xcode can pick them up and display them. 2377 * The library headers have been updated to use HeaderDoc comments so Xcode can 2378 pick them up and display them. 2379 * The per message and per field overhead in both generated code and runtime 2380 object sizes was reduced. 2381 * Generated code now include deprecated annotations when the proto file 2382 included them. 2383 2384 C# (Beta) 2385 In general: some changes are breaking, which require regenerating messages. 2386 Most user-written code will not be impacted *except* for the renaming of enum 2387 values. 2388 2389 * Allow custom type URL prefixes in `Any` packing, and ignore them when 2390 unpacking 2391 * `protoc` is now in a separate NuGet package (Google.Protobuf.Tools) 2392 * New option: `internal_access` to generate internal classes 2393 * Enum values are now PascalCased, and if there's a prefix which matches the 2394 name of the enum, that is removed (so an enum `COLOR` with a value 2395 `COLOR_BLUE` would generate a value of just `Blue`). An option 2396 (`legacy_enum_values`) is temporarily available to disable this, but the 2397 option will be removed for GA. 2398 * `json_name` option is now honored 2399 * If group tags are encountered when parsing, they are validated more 2400 thoroughly (although we don't support actual groups) 2401 * NuGet dependencies are better specified 2402 * Breaking: `Preconditions` is renamed to `ProtoPreconditions` 2403 * Breaking: `GeneratedCodeInfo` is renamed to `GeneratedClrTypeInfo` 2404 * `JsonFormatter` now allows writing to a `TextWriter` 2405 * New interface, `ICustomDiagnosticMessage` to allow more compact 2406 representations from `ToString` 2407 * `CodedInputStream` and `CodedOutputStream` now implement `IDisposable`, 2408 which simply disposes of the streams they were constructed with 2409 * Map fields no longer support null values (in line with other languages) 2410 * Improvements in JSON formatting and parsing 2411 2412 Javascript (Alpha) 2413 * Better support for "bytes" fields: bytes fields can be read as either a 2414 base64 string or UInt8Array (in environments where TypedArray is supported). 2415 * New support for CommonJS imports. This should make it easier to use the 2416 JavaScript support in Node.js and tools like WebPack. See js/README.md for 2417 more information. 2418 * Some significant internal refactoring to simplify and modularize the code. 2419 2420 Ruby (Alpha) 2421 * JSON serialization now properly uses camelCased names, with a runtime option 2422 that will preserve original names from .proto files instead. 2423 * Well-known types are now included in the distribution. 2424 * Release now includes binary gems for Windows, Mac, and Linux instead of just 2425 source gems. 2426 * Bugfix for serializing oneofs. 2427 2428 C++/Java Lite (Alpha) 2429 A new "lite" generator parameter was introduced in the protoc for C++ and 2430 Java for Proto3 syntax messages. Example usage: 2431 2432 ./protoc --cpp_out=lite:$OUTPUT_PATH foo.proto 2433 2434 The protoc will treat the current input and all the transitive dependencies 2435 as LITE. The same generator parameter must be used to generate the 2436 dependencies. 2437 2438 In Proto3 syntax files, "optimized_for=LITE_RUNTIME" is no longer supported. 2439 2440 24412015-12-30 version 3.0.0-beta-2 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript) 2442 General 2443 * Introduced a new language implementation: JavaScript. 2444 * Added a new field option "json_name". By default proto field names are 2445 converted to "lowerCamelCase" in proto3 JSON format. This option can be 2446 used to override this behavior and specify a different JSON name for the 2447 field. 2448 * Added conformance tests to ensure implementations are following proto3 JSON 2449 specification. 2450 2451 C++ (Beta) 2452 * Various bug fixes and improvements to the JSON support utility: 2453 - Duplicate map keys in JSON are now rejected (i.e., translation will 2454 fail). 2455 - Fixed wire-format for google.protobuf.Value/ListValue. 2456 - Fixed precision loss when converting google.protobuf.Timestamp. 2457 - Fixed a bug when parsing invalid UTF-8 code points. 2458 - Fixed a memory leak. 2459 - Reduced call stack usage. 2460 2461 Java (Beta) 2462 * Cleaned up some unused methods on CodedOutputStream. 2463 * Presized lists for packed fields during parsing in the lite runtime to 2464 reduce allocations and improve performance. 2465 * Improved the performance of unknown fields in the lite runtime. 2466 * Introduced UnsafeByteStrings to support zero-copy ByteString creation. 2467 * Various bug fixes and improvements to the JSON support utility: 2468 - Fixed a thread-safety bug. 2469 - Added a new option “preservingProtoFieldNames” to JsonFormat. 2470 - Added a new option “includingDefaultValueFields” to JsonFormat. 2471 - Updated the JSON utility to comply with proto3 JSON specification. 2472 2473 Python (Beta) 2474 * Added proto3 JSON format utility. It includes support for all field types 2475 and a few well-known types except for Any and Struct. 2476 * Added runtime support for Any, Timestamp, Duration and FieldMask. 2477 * [ ] is now accepted for repeated scalar fields in text format parser. 2478 * Map fields now have proper O(1) performance for lookup/insert/delete 2479 when using the Python/C++ implementation. They were previously using O(n) 2480 search-based algorithms because the C++ reflection interface didn't 2481 support true map operations. 2482 2483 Objective-C (Beta) 2484 * Various bug-fixes and code tweaks to pass more strict compiler warnings. 2485 * Now has conformance test coverage and is passing all tests. 2486 2487 C# (Beta) 2488 * Various bug-fixes. 2489 * Code generation: Files generated in directories based on namespace. 2490 * Code generation: Include comments from .proto files in XML doc 2491 comments (naively) 2492 * Code generation: Change organization/naming of "reflection class" (access 2493 to file descriptor) 2494 * Code generation and library: Add Parser property to MessageDescriptor, 2495 and introduce a non-generic parser type. 2496 * Library: Added TypeRegistry to support JSON parsing/formatting of Any. 2497 * Library: Added Any.Pack/Unpack support. 2498 * Library: Implemented JSON parsing. 2499 2500 Javascript (Alpha) 2501 * Added proto3 support for JavaScript. The runtime is written in pure 2502 JavaScript and works in browsers and in Node.js. To generate JavaScript 2503 code for your proto, invoke protoc with "--js_out". See js/README.md 2504 for more build instructions. 2505 25062015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#) 2507 About Beta 2508 * This is the first beta release of protobuf v3.0.0. Not all languages 2509 have reached beta stage. Languages not marked as beta are still in 2510 alpha (i.e., be prepared for API breaking changes). 2511 2512 General 2513 * Proto3 JSON is supported in several languages (fully supported in C++ 2514 and Java, partially supported in Ruby/C#). The JSON spec is defined in 2515 the proto3 language guide: 2516 2517 https://developers.google.com/protocol-buffers/docs/proto3#json 2518 2519 We will publish a more detailed spec to define the exact behavior of 2520 proto3-conformant JSON serializers and parsers. Until then, do not rely 2521 on specific behaviors of the implementation if it’s not documented in 2522 the above spec. More specifically, the behavior is not yet finalized for 2523 the following: 2524 - Parsing invalid JSON input (e.g., input with trailing commas). 2525 - Non-camelCase names in JSON input. 2526 - The same field appears multiple times in JSON input. 2527 - JSON arrays contain “null” values. 2528 - The message has unknown fields. 2529 2530 * Proto3 now enforces strict UTF-8 checking. Parsing will fail if a string 2531 field contains non UTF-8 data. 2532 2533 C++ (Beta) 2534 * Introduced new utility functions/classes in the google/protobuf/util 2535 directory: 2536 - MessageDifferencer: compare two proto messages and report their 2537 differences. 2538 - JsonUtil: support converting protobuf binary format to/from JSON. 2539 - TimeUtil: utility functions to work with well-known types Timestamp 2540 and Duration. 2541 - FieldMaskUtil: utility functions to work with FieldMask. 2542 2543 * Performance optimization of arena construction and destruction. 2544 * Bug fixes for arena and maps support. 2545 * Changed to use cmake for Windows Visual Studio builds. 2546 * Added Bazel support. 2547 2548 Java (Beta) 2549 * Introduced a new util package that will be distributed as a separate 2550 artifact in maven. It contains: 2551 - JsonFormat: convert proto messages to/from JSON. 2552 - TimeUtil: utility functions to work with Timestamp and Duration. 2553 - FieldMaskUtil: utility functions to work with FieldMask. 2554 2555 * The static PARSER in each generated message is deprecated, and it will 2556 be removed in a future release. A static parser() getter is generated 2557 for each message type instead. 2558 * Performance optimizations for String fields serialization. 2559 * Performance optimizations for Lite runtime on Android: 2560 - Reduced allocations 2561 - Reduced method overhead after ProGuarding 2562 - Reduced code size after ProGuarding 2563 2564 Python (Alpha) 2565 * Removed legacy Python 2.5 support. 2566 * Moved to a single Python 2.x/3.x-compatible codebase, instead of using 2to3. 2567 * Fixed build/tests on Python 2.6, 2.7, 3.3, and 3.4. 2568 - Pure-Python works on all four. 2569 - Python/C++ implementation works on all but 3.4, due to changes in the 2570 Python/C++ API in 3.4. 2571 * Some preliminary work has been done to allow for multiple DescriptorPools 2572 with Python/C++. 2573 2574 Ruby (Alpha) 2575 * Many bugfixes: 2576 - fixed parsing/serialization of bytes, sint, sfixed types 2577 - other parser bugfixes 2578 - fixed memory leak affecting Ruby 2.2 2579 2580 JavaNano (Alpha) 2581 * JavaNano generated code now will be put in a nano package by default to 2582 avoid conflicts with Java generated code. 2583 2584 Objective-C (Alpha) 2585 * Added non-null markup to ObjC library. Requires SDK 8.4+ to build. 2586 * Many bugfixes: 2587 - Removed the class/enum filter. 2588 - Renamed some internal types to avoid conflicts with the well-known types 2589 protos. 2590 - Added missing support for parsing repeated primitive fields in packed or 2591 unpacked forms. 2592 - Added *Count for repeated and map<> fields to avoid auto-create when 2593 checking for them being set. 2594 2595 C# (Alpha) 2596 * Namespace changed to Google.Protobuf (and NuGet package will be named 2597 correspondingly). 2598 * Target platforms now .NET 4.5 and selected portable subsets only. 2599 * Removed lite runtime. 2600 * Reimplementation to use mutable message types. 2601 * Null references used to represent "no value" for message type fields. 2602 * Proto3 semantics supported; proto2 files are prohibited for C# codegen. 2603 Most proto3 features supported: 2604 - JSON formatting (a.k.a. serialization to JSON), including well-known 2605 types (except for Any). 2606 - Wrapper types mapped to nullable value types (or string/ByteString 2607 allowing nullability). JSON parsing is not supported yet. 2608 - maps 2609 - oneof 2610 - enum unknown value preservation 2611 26122015-05-25 version 3.0.0-alpha-3 (Objective-C/C#): 2613 General 2614 * Introduced two new language implementations (Objective-C, C#) to proto3. 2615 * Explicit "optional" keyword are disallowed in proto3 syntax, as fields are 2616 optional by default. 2617 * Group fields are no longer supported in proto3 syntax. 2618 * Changed repeated primitive fields to use packed serialization by default in 2619 proto3 (implemented for C++, Java, Python in this release). The user can 2620 still disable packed serialization by setting packed to false for now. 2621 * Added well-known type protos (any.proto, empty.proto, timestamp.proto, 2622 duration.proto, etc.). Users can import and use these protos just like 2623 regular proto files. Additional runtime support will be added for them in 2624 future releases (in the form of utility helper functions, or having them 2625 replaced by language specific types in generated code). 2626 * Added a "reserved" keyword in both proto2 and proto3 syntax. User can use 2627 this keyword to declare reserved field numbers and names to prevent them 2628 from being reused by other fields in the same message. 2629 2630 To reserve field numbers, add a reserved declaration in your message: 2631 2632 message TestMessage { 2633 reserved 2, 15, 9 to 11, 3; 2634 } 2635 2636 This reserves field numbers 2, 3, 9, 10, 11 and 15. If a user uses any of 2637 these as field numbers, the protocol buffer compiler will report an error. 2638 2639 Field names can also be reserved: 2640 2641 message TestMessage { 2642 reserved "foo", "bar"; 2643 } 2644 2645 * Various bug fixes since 3.0.0-alpha-2 2646 2647 Objective-C 2648 Objective-C includes a code generator and a native objective-c runtime 2649 library. By adding “--objc_out” to protoc, the code generator will generate 2650 a header(*.pbobjc.h) and an implementation file(*.pbobjc.m) for each proto 2651 file. 2652 2653 In this first release, the generated interface provides: enums, messages, 2654 field support(single, repeated, map, oneof), proto2 and proto3 syntax 2655 support, parsing and serialization. It’s compatible with ARC and non-ARC 2656 usage. Besides, user can also access it via the swift bridging header. 2657 2658 See objectivec/README.md for details. 2659 2660 C# 2661 * C# protobufs are based on project 2662 https://github.com/jskeet/protobuf-csharp-port. The original project was 2663 frozen and all the new development will happen here. 2664 * Codegen plugin for C# was completely rewritten to C++ and is now an 2665 integral part of protoc. 2666 * Some refactorings and cleanup has been applied to the C# runtime library. 2667 * Only proto2 is supported in C# at the moment, proto3 support is in 2668 progress and will likely bring significant breaking changes to the API. 2669 2670 See csharp/README.md for details. 2671 2672 C++ 2673 * Added runtime support for Any type. To use Any in your proto file, first 2674 import the definition of Any: 2675 2676 // foo.proto 2677 import "google/protobuf/any.proto"; 2678 message Foo { 2679 google.protobuf.Any any_field = 1; 2680 } 2681 message Bar { 2682 int32 value = 1; 2683 } 2684 2685 Then in C++ you can access the Any field using PackFrom()/UnpackTo() 2686 methods: 2687 2688 Foo foo; 2689 Bar bar = ...; 2690 foo.mutable_any_field()->PackFrom(bar); 2691 ... 2692 if (foo.any_field().IsType<Bar>()) { 2693 foo.any_field().UnpackTo(&bar); 2694 ... 2695 } 2696 * In text format, entries of a map field will be sorted by key. 2697 2698 Java 2699 * Continued optimizations on the lite runtime to improve performance for 2700 Android. 2701 2702 Python 2703 * Added map support. 2704 - maps now have a dict-like interface (msg.map_field[key] = value) 2705 - existing code that modifies maps via the repeated field interface 2706 will need to be updated. 2707 2708 Ruby 2709 * Improvements to RepeatedField's emulation of the Ruby Array API. 2710 * Various speedups and internal cleanups. 2711 27122015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano): 2713 General 2714 * Introduced three new language implementations (Ruby, JavaNano, and 2715 Python) to proto3. 2716 * Various bug fixes since 3.0.0-alpha-1 2717 2718 Python: 2719 Python has received several updates, most notably support for proto3 2720 semantics in any .proto file that declares syntax="proto3". 2721 Messages declared in proto3 files no longer represent field presence 2722 for scalar fields (number, enums, booleans, or strings). You can 2723 no longer call HasField() for such fields, and they are serialized 2724 based on whether they have a non-zero/empty/false value. 2725 2726 One other notable change is in the C++-accelerated implementation. 2727 Descriptor objects (which describe the protobuf schema and allow 2728 reflection over it) are no longer duplicated between the Python 2729 and C++ layers. The Python descriptors are now simple wrappers 2730 around the C++ descriptors. This change should significantly 2731 reduce the memory usage of programs that use a lot of message 2732 types. 2733 2734 Ruby: 2735 We have added proto3 support for Ruby via a native C extension. 2736 2737 The Ruby extension itself is included in the ruby/ directory, and details on 2738 building and installing the extension are in ruby/README.md. The extension 2739 will also be published as a Ruby gem. Code generator support is included as 2740 part of `protoc` with the `--ruby_out` flag. 2741 2742 The Ruby extension implements a user-friendly DSL to define message types 2743 (also generated by the code generator from `.proto` files). Once a message 2744 type is defined, the user may create instances of the message that behave in 2745 ways idiomatic to Ruby. For example: 2746 2747 - Message fields are present as ordinary Ruby properties (getter method 2748 `foo` and setter method `foo=`). 2749 - Repeated field elements are stored in a container that acts like a native 2750 Ruby array, and map elements are stored in a container that acts like a 2751 native Ruby hashmap. 2752 - The usual well-known methods, such as `#to_s`, `#dup`, and the like, are 2753 present. 2754 2755 Unlike several existing third-party Ruby extensions for protobuf, this 2756 extension is built on a "strongly-typed" philosophy: message fields and 2757 array/map containers will throw exceptions eagerly when values of the 2758 incorrect type are inserted. 2759 2760 See ruby/README.md for details. 2761 2762 JavaNano: 2763 JavaNano is a special code generator and runtime library designed especially 2764 for resource-restricted systems, like Android. It is very resource-friendly 2765 in both the amount of code and the runtime overhead. Here is an an overview 2766 of JavaNano features compared with the official Java protobuf: 2767 2768 - No descriptors or message builders. 2769 - All messages are mutable; fields are public Java fields. 2770 - For optional fields only, encapsulation behind setter/getter/hazzer/ 2771 clearer functions is opt-in, which provide proper 'has' state support. 2772 - For proto2, if not opted in, has state (field presence) is not available. 2773 Serialization outputs all fields not equal to their defaults. 2774 The behavior is consistent with proto3 semantics. 2775 - Required fields (proto2 only) are always serialized. 2776 - Enum constants are integers; protection against invalid values only 2777 when parsing from the wire. 2778 - Enum constants can be generated into container interfaces bearing 2779 the enum's name (so the referencing code is in Java style). 2780 - CodedInputByteBufferNano can only take byte[] (not InputStream). 2781 - Similarly CodedOutputByteBufferNano can only write to byte[]. 2782 - Repeated fields are in arrays, not ArrayList or Vector. Null array 2783 elements are allowed and silently ignored. 2784 - Full support for serializing/deserializing repeated packed fields. 2785 - Support extensions (in proto2). 2786 - Unset messages/groups are null, not an immutable empty default 2787 instance. 2788 - toByteArray(...) and mergeFrom(...) are now static functions of 2789 MessageNano. 2790 - The 'bytes' type translates to the Java type byte[]. 2791 2792 See javanano/README.txt for details. 2793 27942014-12-01 version 3.0.0-alpha-1 (C++/Java): 2795 2796 General 2797 * Introduced Protocol Buffers language version 3 (aka proto3). 2798 2799 When protobuf was initially opensourced it implemented Protocol Buffers 2800 language version 2 (aka proto2), which is why the version number 2801 started from v2.0.0. From v3.0.0, a new language version (proto3) is 2802 introduced while the old version (proto2) will continue to be supported. 2803 2804 The main intent of introducing proto3 is to clean up protobuf before 2805 pushing the language as the foundation of Google's new API platform. 2806 In proto3, the language is simplified, both for ease of use and to 2807 make it available in a wider range of programming languages. At the 2808 same time a few features are added to better support common idioms 2809 found in APIs. 2810 2811 The following are the main new features in language version 3: 2812 2813 1. Removal of field presence logic for primitive value fields, removal 2814 of required fields, and removal of default values. This makes proto3 2815 significantly easier to implement with open struct representations, 2816 as in languages like Android Java, Objective C, or Go. 2817 2. Removal of unknown fields. 2818 3. Removal of extensions, which are instead replaced by a new standard 2819 type called Any. 2820 4. Fix semantics for unknown enum values. 2821 5. Addition of maps. 2822 6. Addition of a small set of standard types for representation of time, 2823 dynamic data, etc. 2824 7. A well-defined encoding in JSON as an alternative to binary proto 2825 encoding. 2826 2827 This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and 2828 Java. Items 6 (well-known types) and 7 (JSON format) in the above feature 2829 list are not implemented. 2830 2831 A new notion "syntax" is introduced to specify whether a .proto file 2832 uses proto2 or proto3: 2833 2834 // foo.proto 2835 syntax = "proto3"; 2836 message Bar {...} 2837 2838 If omitted, the protocol compiler will generate a warning and "proto2" will 2839 be used as the default. This warning will be turned into an error in a 2840 future release. 2841 2842 We recommend that new Protocol Buffers users use proto3. However, we do not 2843 generally recommend that existing users migrate from proto2 from proto3 due 2844 to API incompatibility, and we will continue to support proto2 for a long 2845 time. 2846 2847 * Added support for map fields (implemented in C++/Java for both proto2 and 2848 proto3). 2849 2850 Map fields can be declared using the following syntax: 2851 2852 message Foo { 2853 map<string, string> values = 1; 2854 } 2855 2856 Data of a map field will be stored in memory as an unordered map and it 2857 can be accessed through generated accessors. 2858 2859 C++ 2860 * Added arena allocation support (for both proto2 and proto3). 2861 2862 Profiling shows memory allocation and deallocation constitutes a significant 2863 fraction of CPU-time spent in protobuf code and arena allocation is a 2864 technique introduced to reduce this cost. With arena allocation, new 2865 objects will be allocated from a large piece of preallocated memory and 2866 deallocation of these objects is almost free. Early adoption shows 20% to 2867 50% improvement in some Google binaries. 2868 2869 To enable arena support, add the following option to your .proto file: 2870 2871 option cc_enable_arenas = true; 2872 2873 Protocol compiler will generate additional code to make the generated 2874 message classes work with arenas. This does not change the existing API 2875 of protobuf messages and does not affect wire format. Your existing code 2876 should continue to work after adding this option. In the future we will 2877 make this option enabled by default. 2878 2879 To actually take advantage of arena allocation, you need to use the arena 2880 APIs when creating messages. A quick example of using the arena API: 2881 2882 { 2883 google::protobuf::Arena arena; 2884 // Allocate a protobuf message in the arena. 2885 MyMessage* message = Arena::CreateMessage<MyMessage>(&arena); 2886 // All submessages will be allocated in the same arena. 2887 if (!message->ParseFromString(data)) { 2888 // Deal with malformed input data. 2889 } 2890 // Must not delete the message here. It will be deleted automatically 2891 // when the arena is destroyed. 2892 } 2893 2894 Currently arena does not work with map fields. Enabling arena in a .proto 2895 file containing map fields will result in compile errors in the generated 2896 code. This will be addressed in a future release. 2897 28982014-10-20 version 2.6.1: 2899 2900 C++ 2901 * Added atomicops support for Solaris. 2902 * Released memory allocated by InitializeDefaultRepeatedFields() and 2903 GetEmptyString(). Some memory sanitizers reported them as memory leaks. 2904 2905 Java 2906 * Updated DynamicMessage.setField() to handle repeated enum values 2907 correctly. 2908 * Fixed a bug that caused NullPointerException to be thrown when 2909 converting manually constructed FileDescriptorProto to 2910 FileDescriptor. 2911 2912 Python 2913 * Fixed WhichOneof() to work with de-serialized protobuf messages. 2914 * Fixed a missing file problem of Python C++ implementation. 2915 29162014-08-15 version 2.6.0: 2917 2918 General 2919 * Added oneofs(unions) feature. Fields in the same oneof will share 2920 memory and at most one field can be set at the same time. Use the 2921 oneof keyword to define a oneof like: 2922 message SampleMessage { 2923 oneof test_oneof { 2924 string name = 4; 2925 YourMessage sub_message = 9; 2926 } 2927 } 2928 * Files, services, enums, messages, methods and enum values can be marked 2929 as deprecated now. 2930 * Added Support for list values, including lists of messages, when 2931 parsing text-formatted protos in C++ and Java. 2932 For example: foo: [1, 2, 3] 2933 2934 C++ 2935 * Enhanced customization on TestFormat printing. 2936 * Added SwapFields() in reflection API to swap a subset of fields. 2937 Added SetAllocatedMessage() in reflection API. 2938 * Repeated primitive extensions are now packable. The 2939 [packed=true] option only affects serializers. Therefore, it is 2940 possible to switch a repeated extension field to packed format 2941 without breaking backwards-compatibility. 2942 * Various speed optimizations. 2943 2944 Java 2945 * writeTo() method in ByteString can now write a substring to an 2946 output stream. Added endWith() method for ByteString. 2947 * ByteString and ByteBuffer are now supported in CodedInputStream 2948 and CodedOutputStream. 2949 * java_generate_equals_and_hash can now be used with the LITE_RUNTIME. 2950 2951 Python 2952 * A new C++-backed extension module (aka "cpp api v2") that replaces the 2953 old ("cpp api v1") one. Much faster than the pure Python code. This one 2954 resolves many bugs and is recommended for general use over the 2955 pure Python when possible. 2956 * Descriptors now have enum_types_by_name and extension_types_by_name dict 2957 attributes. 2958 * Support for Python 3. 2959 29602013-02-27 version 2.5.0: 2961 2962 General 2963 * New notion "import public" that allows a proto file to forward the content 2964 it imports to its importers. For example, 2965 // foo.proto 2966 import public "bar.proto"; 2967 import "baz.proto"; 2968 2969 // qux.proto 2970 import "foo.proto"; 2971 // Stuff defined in bar.proto may be used in this file, but stuff from 2972 // baz.proto may NOT be used without importing it explicitly. 2973 This is useful for moving proto files. To move a proto file, just leave 2974 a single "import public" in the old proto file. 2975 * New enum option "allow_alias" that specifies whether different symbols can 2976 be assigned the same numeric value. Default value is "true". Setting it to 2977 false causes the compiler to reject enum definitions where multiple symbols 2978 have the same numeric value. 2979 Note: We plan to flip the default value to "false" in a future release. 2980 Projects using enum aliases should set the option to "true" in their .proto 2981 files. 2982 2983 C++ 2984 * New generated method set_allocated_foo(Type* foo) for message and string 2985 fields. This method allows you to set the field to a pre-allocated object 2986 and the containing message takes the ownership of that object. 2987 * Added SetAllocatedExtension() and ReleaseExtension() to extensions API. 2988 * Custom options are now formatted correctly when descriptors are printed in 2989 text format. 2990 * Various speed optimizations. 2991 2992 Java 2993 * Comments in proto files are now collected and put into generated code as 2994 comments for corresponding classes and data members. 2995 * Added Parser to parse directly into messages without a Builder. For 2996 example, 2997 Foo foo = Foo.PARSER.ParseFrom(input); 2998 Using Parser is ~25% faster than using Builder to parse messages. 2999 * Added getters/setters to access the underlying ByteString of a string field 3000 directly. 3001 * ByteString now supports more operations: substring(), prepend(), and 3002 append(). The implementation of ByteString uses a binary tree structure 3003 to support these operations efficiently. 3004 * New method findInitializationErrors() that lists all missing required 3005 fields. 3006 * Various code size and speed optimizations. 3007 3008 Python 3009 * Added support for dynamic message creation. DescriptorDatabase, 3010 DescriptorPool, and MessageFactory work like their C++ counterparts to 3011 simplify Descriptor construction from *DescriptorProtos, and MessageFactory 3012 provides a message instance from a Descriptor. 3013 * Added pickle support for protobuf messages. 3014 * Unknown fields are now preserved after parsing. 3015 * Fixed bug where custom options were not correctly populated. Custom 3016 options can be accessed now. 3017 * Added EnumTypeWrapper that provides better accessibility to enum types. 3018 * Added ParseMessage(descriptor, bytes) to generate a new Message instance 3019 from a descriptor and a byte string. 3020 30212011-05-01 version 2.4.1: 3022 3023 C++ 3024 * Fixed the friendship problem for old compilers to make the library now gcc 3 3025 compatible again. 3026 * Fixed vcprojects/extract_includes.bat to extract compiler/plugin.h. 3027 3028 Java 3029 * Removed usages of JDK 1.6 only features to make the library now JDK 1.5 3030 compatible again. 3031 * Fixed a bug about negative enum values. 3032 * serialVersionUID is now defined in generated messages for java serializing. 3033 * Fixed protoc to use java.lang.Object, which makes "Object" now a valid 3034 message name again. 3035 3036 Python 3037 * Experimental C++ implementation now requires C++ protobuf library installed. 3038 See the README.txt in the python directory for details. 3039 30402011-02-02 version 2.4.0: 3041 3042 General 3043 * The RPC (cc|java|py)_generic_services default value is now false instead of 3044 true. 3045 * Custom options can have aggregate types. For example, 3046 message MyOption { 3047 optional string comment = 1; 3048 optional string author = 2; 3049 } 3050 extend google.protobuf.FieldOptions { 3051 optional MyOption myoption = 12345; 3052 } 3053 This option can now be set as follows: 3054 message SomeType { 3055 optional int32 field = 1 [(myoption) = { comment:'x' author:'y' }]; 3056 } 3057 3058 C++ 3059 * Various speed and code size optimizations. 3060 * Added a release_foo() method on string and message fields. 3061 * Fixed gzip_output_stream sub-stream handling. 3062 3063 Java 3064 * Builders now maintain sub-builders for sub-messages. Use getFooBuilder() to 3065 get the builder for the sub-message "foo". This allows you to repeatedly 3066 modify deeply-nested sub-messages without rebuilding them. 3067 * Builder.build() no longer invalidates the Builder for generated messages 3068 (You may continue to modify it and then build another message). 3069 * Code generator will generate efficient equals() and hashCode() 3070 implementations if new option java_generate_equals_and_hash is enabled. 3071 (Otherwise, reflection-based implementations are used.) 3072 * Generated messages now implement Serializable. 3073 * Fields with [deprecated=true] will be marked with @Deprecated in Java. 3074 * Added lazy conversion of UTF-8 encoded strings to String objects to improve 3075 performance. 3076 * Various optimizations. 3077 * Enum value can be accessed directly, instead of calling getNumber() on the 3078 enum member. 3079 * For each enum value, an integer constant is also generated with the suffix 3080 _VALUE. 3081 3082 Python 3083 * Added an experimental C++ implementation for Python messages via a Python 3084 extension. Implementation type is controlled by an environment variable 3085 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION (valid values: "cpp" and "python") 3086 The default value is currently "python" but will be changed to "cpp" in 3087 future release. 3088 * Improved performance on message instantiation significantly. 3089 Most of the work on message instantiation is done just once per message 3090 class, instead of once per message instance. 3091 * Improved performance on text message parsing. 3092 * Allow add() to forward keyword arguments to the concrete class. 3093 E.g. instead of 3094 item = repeated_field.add() 3095 item.foo = bar 3096 item.baz = quux 3097 You can do: 3098 repeated_field.add(foo=bar, baz=quux) 3099 * Added a sort() interface to the BaseContainer. 3100 * Added an extend() method to repeated composite fields. 3101 * Added UTF8 debug string support. 3102 31032010-01-08 version 2.3.0: 3104 3105 General 3106 * Parsers for repeated numeric fields now always accept both packed and 3107 unpacked input. The [packed=true] option only affects serializers. 3108 Therefore, it is possible to switch a field to packed format without 3109 breaking backwards-compatibility -- as long as all parties are using 3110 protobuf 2.3.0 or above, at least. 3111 * The generic RPC service code generated by the C++, Java, and Python 3112 generators can be disabled via file options: 3113 option cc_generic_services = false; 3114 option java_generic_services = false; 3115 option py_generic_services = false; 3116 This allows plugins to generate alternative code, possibly specific to some 3117 particular RPC implementation. 3118 3119 protoc 3120 * Now supports a plugin system for code generators. Plugins can generate 3121 code for new languages or inject additional code into the output of other 3122 code generators. Plugins are just binaries which accept a protocol buffer 3123 on stdin and write a protocol buffer to stdout, so they may be written in 3124 any language. See src/google/protobuf/compiler/plugin.proto. 3125 **WARNING**: Plugins are experimental. The interface may change in a 3126 future version. 3127 * If the output location ends in .zip or .jar, protoc will write its output 3128 to a zip/jar archive instead of a directory. For example: 3129 protoc --java_out=myproto_srcs.jar --python_out=myproto.zip myproto.proto 3130 Currently the archive contents are not compressed, though this could change 3131 in the future. 3132 * inf, -inf, and nan can now be used as default values for float and double 3133 fields. 3134 3135 C++ 3136 * Various speed and code size optimizations. 3137 * DynamicMessageFactory is now fully thread-safe. 3138 * Message::Utf8DebugString() method is like DebugString() but avoids escaping 3139 UTF-8 bytes. 3140 * Compiled-in message types can now contain dynamic extensions, through use 3141 of CodedInputStream::SetExtensionRegistry(). 3142 * Now compiles shared libraries (DLLs) by default on Cygwin and MinGW, to 3143 match other platforms. Use --disable-shared to avoid this. 3144 3145 Java 3146 * parseDelimitedFrom() and mergeDelimitedFrom() now detect EOF and return 3147 false/null instead of throwing an exception. 3148 * Fixed some initialization ordering bugs. 3149 * Fixes for OpenJDK 7. 3150 3151 Python 3152 * 10-25 times faster than 2.2.0, still pure-Python. 3153 * Calling a mutating method on a sub-message always instantiates the message 3154 in its parent even if the mutating method doesn't actually mutate anything 3155 (e.g. parsing from an empty string). 3156 * Expanded descriptors a bit. 3157 31582009-08-11 version 2.2.0: 3159 3160 C++ 3161 * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler 3162 to generate code which only depends libprotobuf-lite, which is much smaller 3163 than libprotobuf but lacks descriptors, reflection, and some other features. 3164 * Fixed bug where Message.Swap(Message) was only implemented for 3165 optimize_for_speed. Swap now properly implemented in both modes 3166 (Issue 91). 3167 * Added RemoveLast and SwapElements(index1, index2) to Reflection 3168 interface for repeated elements. 3169 * Added Swap(Message) to Reflection interface. 3170 * Floating-point literals in generated code that are intended to be 3171 single-precision now explicitly have 'f' suffix to avoid pedantic warnings 3172 produced by some compilers. 3173 * The [deprecated=true] option now causes the C++ code generator to generate 3174 a GCC-style deprecation annotation (no-op on other compilers). 3175 * google::protobuf::GetEnumDescriptor<SomeGeneratedEnumType>() returns the 3176 EnumDescriptor for that type -- useful for templates which cannot call 3177 SomeGeneratedEnumType_descriptor(). 3178 * Various optimizations and obscure bug fixes. 3179 3180 Java 3181 * Lite mode: The "optimize_for = LITE_RUNTIME" option causes the compiler 3182 to generate code which only depends libprotobuf-lite, which is much smaller 3183 than libprotobuf but lacks descriptors, reflection, and some other features. 3184 * Lots of style cleanups. 3185 3186 Python 3187 * Fixed endianness bug with floats and doubles. 3188 * Text format parsing support. 3189 * Fix bug with parsing packed repeated fields in embedded messages. 3190 * Ability to initialize fields by passing keyword args to constructor. 3191 * Support iterators in extend and __setslice__ for containers. 3192 31932009-05-13 version 2.1.0: 3194 3195 General 3196 * Repeated fields of primitive types (types other that string, group, and 3197 nested messages) may now use the option [packed = true] to get a more 3198 efficient encoding. In the new encoding, the entire list is written 3199 as a single byte blob using the "length-delimited" wire type. Within 3200 this blob, the individual values are encoded the same way they would 3201 be normally except without a tag before each value (thus, they are 3202 tightly "packed"). 3203 * For each field, the generated code contains an integer constant assigned 3204 to the field number. For example, the .proto file: 3205 message Foo { optional int bar_baz = 123; } 3206 would generate the following constants, all with the integer value 123: 3207 C++: Foo::kBarBazFieldNumber 3208 Java: Foo.BAR_BAZ_FIELD_NUMBER 3209 Python: Foo.BAR_BAZ_FIELD_NUMBER 3210 Constants are also generated for extensions, with the same naming scheme. 3211 These constants may be used as switch cases. 3212 * Updated bundled Google Test to version 1.3.0. Google Test is now bundled 3213 in its verbatim form as a nested autoconf package, so you can drop in any 3214 other version of Google Test if needed. 3215 * optimize_for = SPEED is now the default, by popular demand. Use 3216 optimize_for = CODE_SIZE if code size is more important in your app. 3217 * It is now an error to define a default value for a repeated field. 3218 Previously, this was silently ignored (it had no effect on the generated 3219 code). 3220 * Fields can now be marked deprecated like: 3221 optional int32 foo = 1 [deprecated = true]; 3222 Currently this does not have any actual effect, but in the future the code 3223 generators may generate deprecation annotations in each language. 3224 * Cross-compiling should now be possible using the --with-protoc option to 3225 configure. See README.txt for more info. 3226 3227 protoc 3228 * --error_format=msvs option causes errors to be printed in Visual Studio 3229 format, which should allow them to be clicked on in the build log to go 3230 directly to the error location. 3231 * The type name resolver will no longer resolve type names to fields. For 3232 example, this now works: 3233 message Foo {} 3234 message Bar { 3235 optional int32 Foo = 1; 3236 optional Foo baz = 2; 3237 } 3238 Previously, the type of "baz" would resolve to "Bar.Foo", and you'd get 3239 an error because Bar.Foo is a field, not a type. Now the type of "baz" 3240 resolves to the message type Foo. This change is unlikely to make a 3241 difference to anyone who follows the Protocol Buffers style guide. 3242 3243 C++ 3244 * Several optimizations, including but not limited to: 3245 - Serialization, especially to flat arrays, is 10%-50% faster, possibly 3246 more for small objects. 3247 - Several descriptor operations which previously required locking no longer 3248 do. 3249 - Descriptors are now constructed lazily on first use, rather than at 3250 process startup time. This should save memory in programs which do not 3251 use descriptors or reflection. 3252 - UnknownFieldSet completely redesigned to be more efficient (especially in 3253 terms of memory usage). 3254 - Various optimizations to reduce code size (though the serialization speed 3255 optimizations increased code size). 3256 * Message interface has method ParseFromBoundedZeroCopyStream() which parses 3257 a limited number of bytes from an input stream rather than parsing until 3258 EOF. 3259 * GzipInputStream and GzipOutputStream support reading/writing gzip- or 3260 zlib-compressed streams if zlib is available. 3261 (google/protobuf/io/gzip_stream.h) 3262 * DescriptorPool::FindAllExtensions() and corresponding 3263 DescriptorDatabase::FindAllExtensions() can be used to enumerate all 3264 extensions of a given type. 3265 * For each enum type Foo, protoc will generate functions: 3266 const string& Foo_Name(Foo value); 3267 bool Foo_Parse(const string& name, Foo* result); 3268 The former returns the name of the enum constant corresponding to the given 3269 value while the latter finds the value corresponding to a name. 3270 * RepeatedField and RepeatedPtrField now have back-insertion iterators. 3271 * String fields now have setters that take a char* and a size, in addition 3272 to the existing ones that took char* or const string&. 3273 * DescriptorPool::AllowUnknownDependencies() may be used to tell 3274 DescriptorPool to create placeholder descriptors for unknown entities 3275 referenced in a FileDescriptorProto. This can allow you to parse a .proto 3276 file without having access to other .proto files that it imports, for 3277 example. 3278 * Updated gtest to latest version. The gtest package is now included as a 3279 nested autoconf package, so it should be able to drop new versions into the 3280 "gtest" subdirectory without modification. 3281 3282 Java 3283 * Fixed bug where Message.mergeFrom(Message) failed to merge extensions. 3284 * Message interface has new method toBuilder() which is equivalent to 3285 newBuilderForType().mergeFrom(this). 3286 * All enums now implement the ProtocolMessageEnum interface. 3287 * Setting a field to null now throws NullPointerException. 3288 * Fixed tendency for TextFormat's parsing to overflow the stack when 3289 parsing large string values. The underlying problem is with Java's 3290 regex implementation (which unfortunately uses recursive backtracking 3291 rather than building an NFA). Worked around by making use of possessive 3292 quantifiers. 3293 * Generated service classes now also generate pure interfaces. For a service 3294 Foo, Foo.Interface is a pure interface containing all of the service's 3295 defined methods. Foo.newReflectiveService() can be called to wrap an 3296 instance of this interface in a class that implements the generic 3297 RpcService interface, which provides reflection support that is usually 3298 needed by RPC server implementations. 3299 * RPC interfaces now support blocking operation in addition to non-blocking. 3300 The protocol compiler generates separate blocking and non-blocking stubs 3301 which operate against separate blocking and non-blocking RPC interfaces. 3302 RPC implementations will have to implement the new interfaces in order to 3303 support blocking mode. 3304 * New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and 3305 writeDelimitedTo() read and write "delimited" messages from/to a stream, 3306 meaning that the message size precedes the data. This way, you can write 3307 multiple messages to a stream without having to worry about delimiting 3308 them yourself. 3309 * Throw a more descriptive exception when build() is double-called. 3310 * Add a method to query whether CodedInputStream is at the end of the input 3311 stream. 3312 * Add a method to reset a CodedInputStream's size counter; useful when 3313 reading many messages with the same stream. 3314 * equals() and hashCode() now account for unknown fields. 3315 3316 Python 3317 * Added slicing support for repeated scalar fields. Added slice retrieval and 3318 removal of repeated composite fields. 3319 * Updated RPC interfaces to allow for blocking operation. A client may 3320 now pass None for a callback when making an RPC, in which case the 3321 call will block until the response is received, and the response 3322 object will be returned directly to the caller. This interface change 3323 cannot be used in practice until RPC implementations are updated to 3324 implement it. 3325 * Changes to input_stream.py should make protobuf compatible with appengine. 3326 33272008-11-25 version 2.0.3: 3328 3329 protoc 3330 * Enum values may now have custom options, using syntax similar to field 3331 options. 3332 * Fixed bug where .proto files which use custom options but don't actually 3333 define them (i.e. they import another .proto file defining the options) 3334 had to explicitly import descriptor.proto. 3335 * Adjacent string literals in .proto files will now be concatenated, like in 3336 C. 3337 * If an input file is a Windows absolute path (e.g. "C:\foo\bar.proto") and 3338 the import path only contains "." (or contains "." but does not contain 3339 the file), protoc incorrectly thought that the file was under ".", because 3340 it thought that the path was relative (since it didn't start with a slash). 3341 This has been fixed. 3342 3343 C++ 3344 * Generated message classes now have a Swap() method which efficiently swaps 3345 the contents of two objects. 3346 * All message classes now have a SpaceUsed() method which returns an estimate 3347 of the number of bytes of allocated memory currently owned by the object. 3348 This is particularly useful when you are reusing a single message object 3349 to improve performance but want to make sure it doesn't bloat up too large. 3350 * New method Message::SerializeAsString() returns a string containing the 3351 serialized data. May be more convenient than calling 3352 SerializeToString(string*). 3353 * In debug mode, log error messages when string-type fields are found to 3354 contain bytes that are not valid UTF-8. 3355 * Fixed bug where a message with multiple extension ranges couldn't parse 3356 extensions. 3357 * Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on 3358 a message that contained no fields (but possibly contained extensions). 3359 * Fixed ShortDebugString() to not be O(n^2). Durr. 3360 * Fixed crash in TextFormat parsing if the first token in the input caused a 3361 tokenization error. 3362 * Fixed obscure bugs in zero_copy_stream_impl.cc. 3363 * Added support for HP C++ on Tru64. 3364 * Only build tests on "make check", not "make". 3365 * Fixed alignment issue that caused crashes when using DynamicMessage on 3366 64-bit Sparc machines. 3367 * Simplify template usage to work with MSVC 2003. 3368 * Work around GCC 4.3.x x86_64 compiler bug that caused crashes on startup. 3369 (This affected Fedora 9 in particular.) 3370 * Now works on "Solaris 10 using recent Sun Studio". 3371 3372 Java 3373 * New overload of mergeFrom() which parses a slice of a byte array instead 3374 of the whole thing. 3375 * New method ByteString.asReadOnlyByteBuffer() does what it sounds like. 3376 * Improved performance of isInitialized() when optimizing for code size. 3377 3378 Python 3379 * Corrected ListFields() signature in Message base class to match what 3380 subclasses actually implement. 3381 * Some minor refactoring. 3382 * Don't pass self as first argument to superclass constructor (no longer 3383 allowed in Python 2.6). 3384 33852008-09-29 version 2.0.2: 3386 3387 General 3388 * License changed from Apache 2.0 to 3-Clause BSD. 3389 * It is now possible to define custom "options", which are basically 3390 annotations which may be placed on definitions in a .proto file. 3391 For example, you might define a field option called "foo" like so: 3392 import "google/protobuf/descriptor.proto" 3393 extend google.protobuf.FieldOptions { 3394 optional string foo = 12345; 3395 } 3396 Then you annotate a field using the "foo" option: 3397 message MyMessage { 3398 optional int32 some_field = 1 [(foo) = "bar"] 3399 } 3400 The value of this option is then visible via the message's 3401 Descriptor: 3402 const FieldDescriptor* field = 3403 MyMessage::descriptor()->FindFieldByName("some_field"); 3404 assert(field->options().GetExtension(foo) == "bar"); 3405 This feature has been implemented and tested in C++ and Java. 3406 Other languages may or may not need to do extra work to support 3407 custom options, depending on how they construct descriptors. 3408 3409 C++ 3410 * Fixed some GCC warnings that only occur when using -pedantic. 3411 * Improved static initialization code, making ordering more 3412 predictable among other things. 3413 * TextFormat will no longer accept messages which contain multiple 3414 instances of a singular field. Previously, the latter instance 3415 would overwrite the former. 3416 * Now works on systems that don't have hash_map. 3417 3418 Java 3419 * Print @Override annotation in generated code where appropriate. 3420 3421 Python 3422 * Strings now use the "unicode" type rather than the "str" type. 3423 String fields may still be assigned ASCII "str" values; they will 3424 automatically be converted. 3425 * Adding a property to an object representing a repeated field now 3426 raises an exception. For example: 3427 # No longer works (and never should have). 3428 message.some_repeated_field.foo = 1 3429 3430 Windows 3431 * We now build static libraries rather than DLLs by default on MSVC. 3432 See vsprojects/readme.txt for more information. 3433 34342008-08-15 version 2.0.1: 3435 3436 protoc 3437 * New flags --encode and --decode can be used to convert between protobuf text 3438 format and binary format from the command-line. 3439 * New flag --descriptor_set_out can be used to write FileDescriptorProtos for 3440 all parsed files directly into a single output file. This is particularly 3441 useful if you wish to parse .proto files from programs written in languages 3442 other than C++: just run protoc as a background process and have it output 3443 a FileDescriptorList, then parse that natively. 3444 * Improved error message when an enum value's name conflicts with another 3445 symbol defined in the enum type's scope, e.g. if two enum types declared 3446 in the same scope have values with the same name. This is disallowed for 3447 compatibility with C++, but this wasn't clear from the error. 3448 * Fixed absolute output paths on Windows. 3449 * Allow trailing slashes in --proto_path mappings. 3450 3451 C++ 3452 * Reflection objects are now per-class rather than per-instance. To make this 3453 possible, the Reflection interface had to be changed such that all methods 3454 take the Message instance as a parameter. This change improves performance 3455 significantly in memory-bandwidth-limited use cases, since it makes the 3456 message objects smaller. Note that source-incompatible interface changes 3457 like this will not be made again after the library leaves beta. 3458 * Heuristically detect sub-messages when printing unknown fields. 3459 * Fix static initialization ordering bug that caused crashes at startup when 3460 compiling on Mac with static linking. 3461 * Fixed TokenizerTest when compiling with -DNDEBUG on Linux. 3462 * Fixed incorrect definition of kint32min. 3463 * Fix bytes type setter to work with byte sequences with embedded NULLs. 3464 * Other irrelevant tweaks. 3465 3466 Java 3467 * Fixed UnknownFieldSet's parsing of varints larger than 32 bits. 3468 * Fixed TextFormat's parsing of "inf" and "nan". 3469 * Fixed TextFormat's parsing of comments. 3470 * Added info to Java POM that will be required when we upload the 3471 package to a Maven repo. 3472 3473 Python 3474 * MergeFrom(message) and CopyFrom(message) are now implemented. 3475 * SerializeToString() raises an exception if the message is missing required 3476 fields. 3477 * Code organization improvements. 3478 * Fixed doc comments for RpcController and RpcChannel, which had somehow been 3479 swapped. 3480 * Fixed text_format_test on Windows where floating-point exponents sometimes 3481 contain extra zeros. 3482 * Fix Python service CallMethod() implementation. 3483 3484 Other 3485 * Improved readmes. 3486 * VIM syntax highlighting improvements. 3487 34882008-07-07 version 2.0.0: 3489 3490 * First public release. 3491