diff --git a/content/news/2026-10-15.md b/content/news/2026-10-15.md new file mode 100644 index 00000000..719da7ce --- /dev/null +++ b/content/news/2026-10-15.md @@ -0,0 +1,64 @@ + + ++++ +title = "Changes Announced on October 15, 2026" +linkTitle = "October 15, 2026" +toc_hide = "true" +description = "Changes announced for Protobuf on October 15, 2026." +type = "docs" ++++ + +The following sections cover additional planned breaking changes in the v38 +release, expected in 2027 Q1. These describe changes as we anticipate them being +implemented, but due to the flexible nature of software some of these changes +may not land or may vary from how they are described in this topic. + +## Changes in C++ {#cpp} + +### Remove NULL Termination in Descriptor Names + +Descriptor APIs that return `absl::string_view` will no longer guarantee null +termination. The null terminators are being removed to achieve memory savings in +descriptors. + +This change applies to descriptor methods that return `absl::string_view`. +Callers must not assume that the pointer returned by `.data()` is +null-terminated. If a null-terminated C-style string is required, callers should +explicitly construct a `std::string` (for example, `std::string(desc->name())`) +or migrate to APIs that accept `absl::string_view` directly. + +## Changes in Protoc {#protoc} + +### Disallow Conflicting Descriptors in `--descriptor_set_in` + +Protoc will error when conflicting file descriptors are provided via +`--descriptor_set_in`. + +Protoc introduced a warning when conflicting descriptors are detected across +input sets. In the v38 release, this warning becomes an error. Build systems and +callers must ensure that descriptor sets fed to `--descriptor_set_in` do not +provide conflicting definitions for the same `.proto` file. + +## Changes in Python {#python} + +### Align `__eq__()` with `Any` Fields on Pure Python with Py-upb Behavior + +Align pure PythonProto `__eq__()` behavior to upb by only comparing the +serialized bytes. There are some edge cases where two `Any` fields may contain +different bytes which are equal only when parsed. These cases used to return +`true`, but will now return `false`. + +## Changes in UPB {#upb} + +### Align Default Value Float and Double Formatting with C++ `FileDescriptor::CopyTo` + +In `upb_FileDef_ToProto`, `float` and `double` default values in +`FieldDescriptorProto.default_value` were previously formatted using hardcoded +`"%.9g"` and `"%.17g"`. This could produce more digits than C++ +`FieldDescriptor::DefaultValueAsString()` (`io::SimpleFtoa` / `io::SimpleDtoa`), +causing `upb_FileDef_ToProto` output to differ from C++ `FileDescriptor::CopyTo` +(for example, `"0.10000000000000001"` vs `"0.1"` for `double`, and +`"7.77777779e+35"` vs `"7.777778e+35"` for `float`). + +In v38, `upb_FileDef_ToProto` will format `float` and `double` default values +using round-trip formatting matching `io::SimpleFtoa` and `io::SimpleDtoa`. diff --git a/content/news/_index.md b/content/news/_index.md index 52059fe3..3dbcf13f 100644 --- a/content/news/_index.md +++ b/content/news/_index.md @@ -20,6 +20,8 @@ New news topics will also be published to the The following news topics provide information in the reverse order in which it was released. +* [October 15, 2026](/news/2026-10-15) - Additional + breaking changes in the upcoming 38.x release * [September 22, 2026](/news/2026-09-22) - Breaking changes in the upcoming 38.x release * [July 13, 2026](/news/2026-07-13) - Edition 2026