"Fossies" - the Fresh Open Source Software Archive

Member "protobuf-3.21.1/CHANGES.txt" (27 May 2022, 155742 Bytes) of package /linux/misc/protobuf-all-3.21.1.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "CHANGES.txt": 3.20.1_vs_3.21.0.

A hint: This file contains one or more very long lines, so maybe it is better readable using the pure text view mode that shows the contents as wrapped lines within the browser window.


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