Skip to content

Protocol Buffers v3.15.0

Compare
Choose a tag to compare
@acozzette acozzette released this 18 Feb 21:30
· 47 commits to 3.15.x since this release

Protocol Compiler

  • Optional fields for proto3 are enabled by default, and no longer require
    the --experimental_allow_proto3_optional flag.

C++

  • MessageDifferencer: fixed bug when using custom ignore with multiple
    unknown fields
  • Use init_seg in MSVC to push initialization to an earlier phase.
  • Runtime no longer triggers -Wsign-compare warnings.
  • Fixed -Wtautological-constant-out-of-range-compare warning.
  • DynamicCastToGenerated works for nullptr input for even if RTTI is disabled
  • Arena is refactored and optimized.
  • Clarified/specified that the exact value of Arena::SpaceAllocated() is an
    implementation detail users must not rely on. It should not be used in
    unit tests.
  • Change the signature of Any::PackFrom() to return false on error.
  • Add fast reflection getter API for strings.
  • Constant initialize the global message instances
  • Avoid potential for missed wakeup in UnknownFieldSet
  • Now Proto3 Oneof fields have "has" methods for checking their presence in
    C++.
  • Bugfix for NVCC
  • Return early in _InternalSerialize for empty maps.
  • Adding functionality for outputting map key values in proto path logging
    output (does not affect comparison logic) and stop printing 'value' in the
    path. The modified print functionality is in the
    MessageDifferencer::StreamReporter.
  • Fixed #8129
  • Ensure that null char symbol, package and file names do not result in a
    crash.
  • Constant initialize the global message instances
  • Pretty print 'max' instead of numeric values in reserved ranges.
  • Removed remaining instances of std::is_pod, which is deprecated in C++20.
  • Changes to reduce code size for unknown field handling by making uncommon
    cases out of line.
  • Fix std::is_pod deprecated in C++20 (#7180)
  • Fix some -Wunused-parameter warnings (#8053)
  • Fix detecting file as directory on zOS issue #8051 (#8052)
  • Don't include sys/param.h for _BYTE_ORDER (#8106)
  • remove CMAKE_THREAD_LIBS_INIT from pkgconfig CFLAGS (#8154)
  • Fix TextFormatMapTest.DynamicMessage issue#5136 (#8159)
  • Fix for compiler warning issue#8145 (#8160)
  • fix: support deprecated enums for GCC < 6 (#8164)
  • Fix some warning when compiling with Visual Studio 2019 on x64 target (#8125)

Python

  • Provided an override for the reverse() method that will reverse the internal
    collection directly instead of using the other methods of the BaseContainer.
  • MessageFactory.CreateProtoype can be overridden to customize class creation.
  • Fix PyUnknownFields memory leak (#7928)
  • Add macOS big sur compatibility (#8126)

JavaScript

  • Generate getDescriptor methods with * as their this type.
  • Enforce let/const for generated messages.
  • js/binary/utils.js: Fix jspb.utils.joinUnsignedDecimalString to work with negative bitsLow and low but non-zero bitsHigh parameter. (#8170)

PHP

  • Added support for PHP 8. (#8105)
  • unregister INI entries and fix invalid read on shutdown (#8042)
  • Fix PhpDoc comments for message accessors to include "|null". (#8136)
  • fix: convert native PHP floats to single precision (#8187)
  • Fixed PHP to support field numbers >=2**28. (#8235)
  • feat: add support for deprecated fields to PHP compiler (#8223)
  • Protect against stack overflow if the user derives from Message. (#8248)
  • Fixed clone for Message, RepeatedField, and MapField. (#8245)
  • Updated upb to allow nonzero offset minutes in JSON timestamps. (#8258)

Ruby

  • Added support for Ruby 3. (#8184)
  • Rewrote the data storage layer to be based on upb_msg objects from the
    upb library. This should lead to much better parsing performance,
    particularly for large messages. (#8184).
  • Fill out JRuby support (#7923)
  • [Ruby] Fix: (SIGSEGV) gRPC-Ruby issue on Windows. memory alloc infinite
    recursion/run out of memory (#8195)
  • Fix jruby support to handle messages nested more than 1 level deep (#8194)

Java

  • Avoid possible UnsupportedOperationException when using CodedInputSteam
    with a direct ByteBuffer.
  • Make Durations.comparator() and Timestamps.comparator() Serializable.
  • Add more detailed error information for dynamic message field type
    validation failure
  • Removed declarations of functions declared in java_names.h from
    java_helpers.h.
  • Now Proto3 Oneof fields have "has" methods for checking their presence in
    Java.
  • Annotates Java proto generated *_FIELD_NUMBER constants.
  • Add -assumevalues to remove JvmMemoryAccessor on Android.

C#

  • Fix parsing negative Int32Value that crosses segment boundary (#8035)
  • Change ByteString to use memory and support unsafe create without copy (#7645)
  • Optimize MapField serialization by removing MessageAdapter (#8143)
  • Allow FileDescriptors to be parsed with extension registries (#8220)
  • Optimize writing small strings (#8149)