Änderungen angekündigt am 19. September 2025

Änderungen, die für Protocol Buffers am 19. September 2025 angekündigt wurden.

Die folgenden Abschnitte behandeln geplante abwärts inkompatible Änderungen in der v34-Version, die für Q1 2026 erwartet wird. Diese beschreiben Änderungen, wie wir sie zu implementieren erwarten, aber aufgrund der flexiblen Natur von Software können einige dieser Änderungen möglicherweise nicht umgesetzt werden oder von der hier beschriebenen Art abweichen.

Änderungen in C++

C++ wird seine Major-Version auf 7 mit der Version 7.34.0 anheben. 6.33 wird die letzte Minor-Version-Release der 6.x-Reihe sein.

Entfernung von Future-Makros

Die folgenden Makros, die für die schrittweise Einführung von abwärts inkompatiblen Änderungen eingeführt wurden, werden entfernt und ihr Verhalten wird zum Standard

  • PROTOBUF_FUTURE_RENAME_ADD_UNUSED_IMPORT
  • PROTOBUF_FUTURE_REMOVE_ADD_IGNORE_CRITERIA
  • PROTOBUF_FUTURE_STRING_VIEW_DESCRIPTOR_DATABASE
  • PROTOBUF_FUTURE_NO_RECURSIVE_MESSAGE_COPY

Neues RepeatedPtrField-Layout

RepeatedPtrField wird zu einem neuen internen Elementlayout übergehen, bei dem Elemente in zusammenhängenden Blöcken vorab zugewiesenen Speichers gespeichert werden, ähnlich wie std::deque. Dies führt zu einigen Änderungen an den Kopier-/Verschiebe-Semantiken einiger APIs, und einige UnsafeArena-APIs könnten funktionale Äquivalente ihrer Arena-sicheren Gegenstücke werden und als veraltet markiert werden.

MSB-Härtungsprüfung bei RepeatedField::Get und RepeatedPtrField::Get

Protobufs werden gegen OOB-Fehler gehärtet, indem umfassende Bereichsprüfungen für den Zugriff auf wiederholte Felder hinzugefügt werden.

Arena-Zeiger aus Repeated Fields entfernen

Der Konstruktor RepeatedPtrField(Arena*) wird gelöscht.

Veraltete APIs entfernt

Diese Version wird die folgenden öffentlichen Laufzeit-APIs entfernen, die seit mindestens einer Minor- oder Major-Version als veraltet markiert sind und die obsolet oder ersetzt sind.

AddUnusedImportTrackFile() und ClearUnusedImportTrackFiles()

API: AddUnusedImportTrackFile(), ClearUnusedImportTrackFiles()

Ersatz: AddDirectInputFile() und ClearDirectInputFiles()

AddIgnoreCriteria aus dem Nachrichten-Differenzierer

PROTOBUF_FUTURE_REMOVE_ADD_IGNORE_CRITERIA wurde für die abwärts inkompatible Änderung hinzugefügt. Diese Version wird das Makro entfernen.

API: AddIgnoreCriteria()

Ersatz: Wickeln Sie den Rohzeiger in einen unique_ptr.

FieldDescriptor::has_optional_keyword()

API: FieldDescriptor::has_optional_keyword()

Ersatz: has_presence()

FieldDescriptor::label()

API: FieldDescriptor::label()

Ersatz: is_repeated() oder is_required()

FieldDescriptor::is_optional()

API: FieldDescriptor::is_optional()

Ersatz: !is_required() && !is_repeated()

UseDeprecatedLegacyJsonFieldConflicts()

API: UseDeprecatedLegacyJsonFieldConflicts()

Ersatz: Kein Ersatz.

Strengere Grenzwerte für Namenslängen

Der Protobuf-Compiler wird strengere Grenzwerte für die Länge von Symbolnamen, wie z.B. Feldnamen, durchsetzen, um potenzielle Probleme zu vermeiden. Wenn die Länge eines Feldnamens größer als 2^16 ist, wird ein Fehler generiert.

Private Generator-Header in CMake ausblenden

Die protoc-Generator-Header werden nicht mehr von CMake installiert. Dies sollte die meisten Benutzer nicht beeinträchtigen.

[[nodiscard]] bei logisch konstanten Operationen

[[nodiscard]] wird zu mehreren logisch konstanten Protobuf-APIs hinzugefügt, bei denen das Nicht-Verbrauchen des zurückgegebenen Werts auf einen wahrscheinlichen Fehler hinweist. Dies folgt gängigen Mustern der C++-Standardbibliothek.

Änderungen in Python

Python wird seine Major-Version auf 7 mit der Version 7.34.0 anheben. 6.33 wird die letzte Minor-Version-Release der 6.x-Reihe sein.

Es gibt keine Änderung im gencode und wir werden die "poison pills" lockern. Für alte generierte Dateien für 7.34.x werden keine Warnungen oder Fehler ausgegeben.

TypeError bei falscher Typkonvertierung zu Timestamp/Duration auslösen

Diese Version wird einen TypeError anstelle eines AttributeError auslösen, wenn ein falscher Typ in einen Timestamp oder Duration konvertiert wird.

Ablehnung von bool zu enum und int Feld

Diese Version wird die Zuweisung von enum- oder int-Feldern mit booleschen Werten ablehnen. Die API wird stattdessen einen Fehler auslösen, anstatt sie implizit zu konvertieren.

float_precision aus json_format entfernen

Diese Version wird die veraltete Option float_precision aus dem json_format-Serializer entfernen. Diese Option existiert in anderen ProtoJSON-Serializern nicht und hat verwirrende Semantiken.

float_format/double_format aus text_format entfernen

Diese Version wird die veralteten Optionen float_format und double_format aus text_format entfernen. Diese Optionen sind in anderen Proto-Textformat-Serializern nicht verfügbar.

Veraltete APIs entfernt

Diese Version wird die folgenden öffentlichen Laufzeit-APIs entfernen.

FieldDescriptor.label

API: FieldDescriptor.label

Ersatz: Verwenden Sie is_repeated() oder is_required().

Änderungen in PHP

PHP wird seine Major-Version auf 5 mit der Version 5.34.0 anheben. 4.33 wird die letzte Minor-Version-Release der 4.x-Reihe sein.

Veraltete APIs entfernt

Diese Version wird die folgenden öffentlichen Laufzeit-APIs entfernen.

FieldDescriptor getLabel

API: FieldDescriptor getLabel

Ersatz: isRepeated() oder isRequired()

Google\Protobuf\Field_Kind

API: Google\Protobuf\Field_Kind

Ersatz: Google\Protobuf\Field\Kind

Google\Protobuf\Field_Cardinality

API: Google\Protobuf\Field_Cardinality

Ersatz: Google\Protobuf\Field\Cardinality

Google\Protobuf\Internal\RepeatedField

API: Google\Protobuf\Internal\RepeatedField

Ersatz: Google\Protobuf\RepeatedField

Striktheit bei der JSON-Analyse

Der JSON-Parser wird strikter und wird mehrere Fälle ablehnen, die zuvor akzeptiert wurden. Dazu gehören Werte außerhalb des gültigen Bereichs, nicht-ganzzahlige numerische Werte für Ganzzahlfelder, doppelte Oneof-Felder und Nicht-Zeichenkettenwerte für Zeichenkettenfelder. Der JSON-Serializer wird auch Infinity und NaN für numerische Werte ablehnen.

Fehler bei stillschweigender Ignorierung von Standardwerten beheben

Die PHP-Laufzeit wird korrigiert, um Standardwerte bei Skalarfeldern in proto2 und Editionen zu berücksichtigen, anstatt sie stillschweigend zu ignorieren.

Ausrichtung der Typüberprüfung

Die Typüberprüfung für reine PHP- und upb-PHP-Implementierungen wird angeglichen. Insbesondere wird reine PHP null für Zeichenkettenfelder ablehnen, was dem Verhalten von upb-PHP entspricht.

Änderungen in Objective-C

Objective-C wird seine Major-Version auf 5 mit der Version 5.34.0 anheben. 4.33 wird die letzte Minor-Version-Release der 4.x-Reihe sein.

Die Nullability-Annotationen für einige GPB*Dictionary-APIs werden korrigiert, um zu kennzeichnen, wann APIs nil zurückgeben könnten. Dies führt dazu, dass Swift-Code ein Swift Optional<T> erhält und somit eine abwärts inkompatible API-Änderung darstellt. Für Objective-C-Aufrufer ist die Korrektur der Annotation unwahrscheinlich, dass sie sich auf den Quellcode auswirkt.

Veraltete APIs entfernt

Diese Version wird die folgenden öffentlichen Laufzeit-APIs entfernen.

-[GPBFieldDescriptor optional]

API: -[GPBFieldDescriptor optional]

Ersatz: Verwenden Sie stattdessen !required && fieldType == GPBFieldTypeSingle.

Weitere Änderungen

Die folgenden sind zusätzliche abwärts inkompatible Änderungen.

Bazel: Veraltete ProtoInfo.transitive_imports entfernen

Das veraltete Feld transitive_imports in ProtoInfo wird entfernt. Benutzer sollten zu transitive_sources migrieren.

protobuf_allow_msvc Flag entfernen und Bazel+MSVC weiterhin unterstützen

Aufgrund der jüngsten Verbesserungen von Bazel unter Windows planen wir nun, Bazel+MSVC weiterhin zu unterstützen. Das Flag --define=protobuf_allow_msvc wird entfernt.

Sprachen ohne Major-Version-Bump

Java, Ruby, C#, Rust und JRuby werden in dieser Version keinen Major-Version-Bump haben.