Protobuf v3.8.0-rc1 Release Notes

Release Date: 2019-05-01 // almost 5 years ago
  • C++

    • 👉 Use std::atomic in case of myriad2 platform
    • Always declare enums to be int-sized
    • ➕ Added DebugString() and ShortDebugString() methods on MessageLite
    • 📜 Specialized different parse loop control flows
    • 👉 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.
    • 🚚 Move to an internal MACRO for parser validity checks.
    • 👌 Improve map parsing performance.
    • 🔀 Make MergePartialFromCodedStream non virtual. This allows direct calls, potential inlining and is also a code health improvement
    • ➕ Add an overall limit to parse_context to prevent reading past it. This allows to remove a annoying level of indirection.
    • 🛠 Fix a mistake, we shouldn't verify map key/value strings for utf8 in opt mode for proto2.
    • Further improvements to cut binary size.
    • 🔀 Prepare to make MergePartialFromCodedStream non-virtual.
    • 📜 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.
    • ➕ Add a note of caution to the comments around skip in CodedOutputStream.
    • Simplify end check.
    • ➕ Add overload for ParseMessage for MessageLite/Message types. If the explicit type is not known inlining won't help de-virtualizing the virtual call.
    • ⬇️ 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.
    • 👌 Improve the parser.
    • 🗄 [c++17] Changed proto2::RepeatedPtrField iterators to no longer derive from the deprecated std::iterator class.
    • Change the default value of case_insensitive_enum_parsing to false for JsonStringToMessage.
    • ➕ Add a warning if a field name doesn't match the style guide.
    • 🛠 Fix TextFormat not round-trip correctly when float value is max float.
    • ➕ Added locationed info for some errors at compiler
    • Python reserved keywords are now working with getattr()/setattr() for most descriptors.
    • ➕ Added AllowUnknownField() in text_format
    • Append '_' to C++ reserved keywords for message, enum, extension
    • 🛠 Fix MSVC warning C4244 in protobuf's parse_context.h.
    • ⚡️ Updating Iterators to be compatible with C++17 in MSVC.
    • 👉 Use capability annotation in mutex.h
    • 🛠 Fix "UndefinedBehaviorSanitizer: cfi-bad-type"
    • 🚑 CriticalSectionLock class as a lightweight replacement for std::mutex on Windows platforms.
    • Removed vestigial wire_format_lite_inl.h

    C

    • ➕ Added System.Memory dependency.

    Java

    • Make Java protoc code generator ignore optimize_for LITE_RUNTIME. Users should instead use the Java lite protoc plugin.
    • 🔄 Change Extension getMessageDefaultInstance() to return Message instead of MessageLite.
    • ✅ Prevent malicious input streams from leaking buffers for ByteString or ByteBuffer parsing.
    • 🚀 Release new Javalite runtime.
    • ⚠ Show warning in case potential file name conflict.
    • 👍 Allow Java reserved keywords to be used in extensions.
    • ➕ Added setAllowUnknownFields() in text format
    • ➕ Add memoization to ExtensionRegistryLite.getEmptyRegistry()
    • 👌 Improve performance of CodedOutputStream.writeUInt32NoTag
    • ➕ Add an optimized mismatch-finding algorithm to UnsafeUtil.
    • When serializing uint32 varints, check that we have MAX_VARINT32_SIZE bytes left, not just MAX_VARINT_SIZE.
    • ✅ Minor optimization to RopeByteString.PieceIterator

    JavaScript

    • 0️⃣ Simplify generated toObject code when the default value is used.

    Python

    • 🔄 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).
    • ➕ Added double_format option in text format printer.
    • Added iter and contains to extension dict
    • Added allow_unknown_field option in python text format parser
    • 🛠 Fixed Timestamp.ToDatetime() loses precision issue
    • 👌 Support unknown field in text format printer.
    • 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,
      convert to -inf if smaller than -3.4028234664e+38
    • Allowed casting str->bytes in Message. setstate

    💎 Ruby

    • 💎 Helper methods to get enum name for Ruby.