Protobuf v3.10.0 Release Notes

Release Date: 2019-10-03 // 18 days ago
  • C++

    • 📜 Switch the proto parser to the faster MOMI parser.
    • Properly escape Struct keys in the proto3 JSON serializer.
    • 🛠 Fix crash on uninitialized map entries.
    • 👍 Informed the compiler of has-bit invariant to produce better code
    • Unused imports of files defining descriptor extensions will now be reported
    • ➕ Add proto2::util::RemoveSubranges to remove multiple subranges in linear time.
    • ➕ Added BaseTextGenerator::GetCurrentIndentationSize()
    • Made implicit weak fields compatible with the Apple linker
    • 👌 Support 32 bit values for ProtoStreamObjectWriter to Struct.
    • Removed the internal-only header coded_stream_inl.h and the internal-only methods defined there.
    • Enforced no SWIG wrapping of descriptor_database.h (other headers already had this restriction).
    • 🚚 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.
    • Do not convert unknown field name to snake case to accurately report error.
    • 🛠 Fix a UBSAN warnings. (#6333)
    • ➕ Add podspec for C++ (#6404)
    • protoc: fix source code info location for missing label (#6436)
    • 🚚 C++ Add move constructor for Reflection's SetString (#6477)

    Java

    🚀 This release has a known issue on Android API level <26 (#6718)

    • 🔀 Call loadDescriptor outside of synchronized block to remove one possible source of deadlock.
    • Have oneof enums implement a separate interface (other than EnumLite) for clarity.
    • Opensource Android Memory Accessors
    • ⚡️ Update TextFormat to make use of the new TypeRegistry.
    • 👌 Support getFieldBuilder and getRepeatedFieldBuilder in ExtendableBuilder
    • ⚡️ Update JsonFormat to make use of the new TypeRegistry.
    • ➕ Add proguard config generator for GmmBenchmarkSuiteLite.
    • 🔄 Change ProtobufArrayList to use Object[] instead of ArrayList for 5-10% faster parsing
    • 📜 Implement ProtobufArrayList.add(E) for 20% (5%-40%) faster overall protolite2 parsing
    • 📦 Make a copy of JsonFormat.TypeRegistry at the protobuf top level package. This will eventually replace JsonFormat.TypeRegistry.
    • 🛠 Fix javadoc warnings in generated files (#6231)
    • Java: Add Automatic-Module-Name entries to the Manifest (#6568)

    Python

    • ➕ Add descriptor methods in descriptor_pool are deprecated.
    • ✅ Uses explicit imports to prevent multithread test failures in py3.
    • Added delitem for Python extension dict
    • Update six version to 1.12.0 and fix legacy_create_init issue (#6391)

    JavaScript

    • ✂ Remove deprecated boolean option to getResultBase64String().
    • 🛠 Fix sint64 zig-zag encoding.
    • 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.
    • 🔄 Change the parameter types of binaryReaderFn in ExtensionFieldBinaryInfo to (number, ?, ?).
    • 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.
    • Migrate moneys to TypeScript.

    PHP

    • 🛠 Fix incorrect leap day for Timestamp (#6696)
    • 🎉 Initialize well known type values (#6713)

    💎 Ruby

    • 🛠 Fix scope resolution for Google namespace (#5878)
    • 👌 Support hashes for struct initializers (#5716)
    • ⚡️ Optimized away the creation of empty string objects. (#6502)
    • 🏗 Roll forward Ruby upb changes now that protobuf Ruby build is fixed (#5866)
    • ⚡️ Optimized layout_mark() for Ruby (#6521)
    • Optimization for layout_init() (#6547)
    • 🛠 Fix for GC of Ruby map frames. (#6533)
    • Fixed leap year handling by reworking upb_mktime() -> upb_timegm(). (#6695)

    Objective C

    • ✂ Remove OSReadLittle* due to alignment requirements (#6678)
    • Don't use unions and instead use memcpy for the type swaps. (#6672)

    Other

    • Override CocoaPods module to lowercase (#6464)

Previous changes from v3.10.0-rc1

  • C++

    • 📜 Switch the proto parser to the faster MOMI parser.
    • Properly escape Struct keys in the proto3 JSON serializer.
    • 🛠 Fix crash on uninitialized map entries.
    • 👍 Informed the compiler of has-bit invariant to produce better code
    • Unused imports of files defining descriptor extensions will now be reported
    • ➕ Add proto2::util::RemoveSubranges to remove multiple subranges in linear time.
    • ➕ Added BaseTextGenerator::GetCurrentIndentationSize()
    • Made implicit weak fields compatible with the Apple linker
    • 👌 Support 32 bit values for ProtoStreamObjectWriter to Struct.
    • Removed the internal-only header coded_stream_inl.h and the internal-only methods defined there.
    • Enforced no SWIG wrapping of descriptor_database.h (other headers already had this restriction).
    • 🚚 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.
    • Do not convert unknown field name to snake case to accurately report error.
    • 🛠 Fix a UBSAN warnings. (#6333)
    • ➕ Add podspec for C++ (#6404)
    • protoc: fix source code info location for missing label (#6436)
    • 🚚 C++ Add move constructor for Reflection's SetString (#6477)

    Java

    • 🔀 Call loadDescriptor outside of synchronized block to remove one possible source of deadlock.
    • Have oneof enums implement a separate interface (other than EnumLite) for clarity.
    • Opensource Android Memory Accessors
    • ⚡️ Update TextFormat to make use of the new TypeRegistry.
    • 👌 Support getFieldBuilder and getRepeatedFieldBuilder in ExtendableBuilder
    • ⚡️ Update JsonFormat to make use of the new TypeRegistry.
    • ➕ Add proguard config generator for GmmBenchmarkSuiteLite.
    • 🔄 Change ProtobufArrayList to use Object[] instead of ArrayList for 5-10% faster parsing
    • 📜 Implement ProtobufArrayList.add(E) for 20% (5%-40%) faster overall protolite2 parsing
    • 📦 Make a copy of JsonFormat.TypeRegistry at the protobuf top level package. This will eventually replace JsonFormat.TypeRegistry.
    • 🛠 Fix javadoc warnings in generated files (#6231)
    • Java: Add Automatic-Module-Name entries to the Manifest (#6568)

    Python

    • ➕ Add descriptor methods in descriptor_pool are deprecated.
    • ✅ Uses explicit imports to prevent multithread test failures in py3.
    • Added delitem for Python extension dict
    • Update six version to 1.12.0 and fix legacy_create_init issue (#6391)

    JavaScript

    • ✂ Remove deprecated boolean option to getResultBase64String().
    • 🛠 Fix sint64 zig-zag encoding.
    • 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.
    • 🔄 Change the parameter types of binaryReaderFn in ExtensionFieldBinaryInfo to (number, ?, ?).
    • 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.
    • Migrate moneys to TypeScript.

    💎 Ruby

    • 🛠 Fix scope resolution for Google namespace (#5878)
    • 👌 Support hashes for struct initializers (#5716)
    • ⚡️ Optimized away the creation of empty string objects. (#6502)
    • 🏗 Roll forward Ruby upb changes now that protobuf Ruby build is fixed (#5866)
    • ⚡️ Optimized layout_mark() for Ruby (#6521)
    • Optimization for layout_init() (#6547)
    • 🛠 Fix for GC of Ruby map frames. (#6533)

    Other

    • Override CocoaPods module to lowercase (#6464)