Änderungen angekündigt am 19. September 2025
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_IMPORTPROTOBUF_FUTURE_REMOVE_ADD_IGNORE_CRITERIAPROTOBUF_FUTURE_STRING_VIEW_DESCRIPTOR_DATABASEPROTOBUF_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.