Änderungen angekündigt am 2. Oktober 2024
Die folgenden Abschnitte behandeln geplante Breaking Changes in der v30-Version, die für 2025 Q1 erwartet wird. Sie beschreiben die Änderungen, wie wir sie bei der Implementierung erwarten. Aufgrund der flexiblen Natur von Software werden einige dieser Änderungen möglicherweise nicht umgesetzt oder können von der hier beschriebenen Art abweichen.
Änderungen in C++
C++ wird seine Hauptversion von 5.29.x auf 6.30.x erhöhen.
Descriptor APIs
v30 wird Rückgabetypen in Deskriptoren (wie z. B. full_name) auf absl::string_view aktualisieren. Dies ermöglicht Speicherersparnisse bei Deskriptoren.
v28 führte das Makro PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE ein, das Sie inzwischen verwenden können, um den aktualisierten Rückgabetyp vor der Breaking Release zu aktivieren. Die v30-Version wird die Standardeinstellung umkehren und das Makro entfernen.
ctype aus FieldDescriptor-Optionen entfernt
v30 wird den ctype aus den FieldDescriptor-Optionen nicht mehr verfügbar machen. Sie können stattdessen die FieldDescriptor::cpp_string_type() API verwenden, die in der v28-Version hinzugefügt wurde.
CMake-Submodule durch abgerufene Abhängigkeiten ersetzen
v30 wird Submodule entfernen und zum alten CMake-Muster von upb wechseln, um Abhängigkeiten abzurufen.
Wenn Sie installierte Pakete verwenden, sind Sie nicht betroffen. Dies kann einige CMake-Workflows beeinträchtigen.
Veraltete APIs entfernt
v30 wird die folgenden öffentlichen Runtime-APIs entfernen, die seit mindestens einer Minor- oder Major-Version als veraltet (z. B. ABSL_DEPRECATED) markiert sind und veraltet oder ersetzt wurden.
Arena::CreateMessage
API: Arena::CreateMessage
Ersatz: Arena::Create
Arena::GetArena
API: Arena::GetArena
Ersatz: value->GetArena()
RepeatedPtrField::ClearedCount
API: RepeatedPtrField::ClearedCount
Ersatz: Migration zu Arenen (Migrationsleitfaden).
JsonOptions
API: JsonOptions
Ersatz: JsonPrintOptions
Unterstützung für C++14 wird eingestellt
Diese Version wird C++ 14 als minimale unterstützte Version einstellen und sie auf 17 erhöhen, gemäß der Foundational C++ Support Matrix.
Gemäß unseren Richtlinien betrachten wir dies nicht als Breaking Change.
Änderungen in JRuby
v30 wird die Standardimplementierung für JRuby auf FFI umstellen, was für einige JRuby-Benutzer zu Problemen führen kann.
Beachten Sie, dass diese Änderung keine Ruby-Hauptversionserhöhung verursacht, da JRuby nicht offiziell unterstützt wird.
Änderungen in Python
Python wird seine Hauptversion von 5.29.x auf 6.30.x erhöhen.
Unterstützung für Python 3.8 wird eingestellt
Gemäß unserer offiziellen Python-Supportrichtlinie werden wir die Unterstützung für Python 3.8 und älter einstellen. Das bedeutet, dass die minimale unterstützte Python-Version 3.9 ist.
Alias bazel/system_python.bzl entfernen
v30 wird den Legacy-Alias bazel/system_python.bzl entfernen.
Entfernen Sie direkte Verweise auf system_python.bzl zugunsten der Verwendung von protobuf_deps.bzl. Verwenden Sie python/dist/system_python.bzl, wohin es in v5.27.0 verschoben wurde, wenn Sie einen direkten Verweis benötigen.
Änderungen bei der Validierung von Feldsettern
Die Feld-Setter von Python und upb werden in v30 korrigiert, um geschlossene Enums unter Edition 2023 zu validieren. Feld-Setter für geschlossene Enums, die mit ungültigen Werten aktualisiert werden, generieren Fehler.
Veraltete APIs entfernt
v30 wird die folgenden öffentlichen Runtime-APIs entfernen, die seit mindestens einer Minor- oder Major-Version als veraltet markiert sind und veraltet oder ersetzt wurden.
Reflection-Methoden
APIs: reflection.ParseMessage, reflection.MakeClass
Ersatz: message_factory.GetMessageClass()
RPC-Dienstschnittstellen
APIs: service.RpcException, service.Service, service.RpcController und service.RpcChannel
Ersatz: Ab Version 2.3.0 sollten RPC-Implementierungen nicht versuchen, darauf aufzubauen, sondern stattdessen Code-Generator-Plugins bereitstellen, die Code für die jeweilige RPC-Implementierung generieren.
MessageFactory- und SymbolDatabase-Methoden
APIs: MessageFactory.GetPrototype, MessageFactory.CreatePrototype, MessageFactory.GetMessages, SymbolDatabase.GetPrototype, SymbolDatabase.CreatePrototype und SymbolDatabase.GetMessages
Ersatz: message_factory.GetMessageClass() und message_factory.GetMessageClassesForFiles().
GetDebugString
APIs: GetDebugString
Ersatz
Kein Ersatz. Nur in Python C++, das nicht mehr veröffentlicht wird. Es wird in reinem Python oder UPB nicht unterstützt.
Änderungen in Objective-C
Dies wird die erste Breaking Release für Objective-C sein.
Objective-C wird seine Hauptversion von 3.x.x auf 4.30.x erhöhen.
Überarbeitung der APIs zur Behandlung unbekannter Felder, wobei die meisten bestehenden APIs als veraltet markiert werden
v30 wird GPBUnknownFieldSet als veraltet markieren und durch GPBUnknownFields ersetzen. Der neue Typ behält die Reihenfolge unbekannter Felder aus dem ursprünglichen Eingabe- oder API-Aufruf bei, um sicherzustellen, dass jede semantische Bedeutung der Reihenfolge erhalten bleibt, wenn eine Nachricht zurückgeschrieben wird.
Als Teil davon werden auch die APIs des Typs GPBUnknownField geändert, wobei fast alle bestehenden APIs als veraltet markiert und neue hinzugefügt werden.
Veraltete Property-APIs
varintListfixed32Listfixed64ListlengthDelimitedListgroupList
Veraltete Modifizierungs-APIs
addVarintaddFixed32addFixed64addLengthDelimitedaddGroup
Veralteter Initialisierer initWithNumber:.
Neue Property-APIs
typevarintfixed32fixed64lengthDelimitedgroup
Dieser Typ wird einen einzelnen Feldwert in seinem Wert modellieren, anstatt alle Werte für eine gegebene Feldnummer zu *gruppieren*. Die APIs zum Erstellen neuer Felder sind die add* APIs der Klasse GPBUnknownFields.
v30 wird auch -[GPBMessage unknownFields] als veraltet markieren. An seiner Stelle wird es neue APIs geben, um die unbekannten Felder der Nachricht zu extrahieren und zu aktualisieren.
Veraltete APIs entfernt
v30 wird die folgenden öffentlichen Runtime-APIs entfernen, die seit mindestens einer Minor- oder Major-Version als veraltet markiert sind und veraltet oder ersetzt wurden.
GPBFileDescriptor
API: -[GPBFileDescriptor syntax]
Ersatz: Obsolet.
GPBMessage mergeFrom:extensionRegistry
API: -[GPBMessage mergeFrom:extensionRegistry:]
Ersatz: -[GPBMessage mergeFrom:extensionRegistry:error:]
GPBDuration timeIntervalSince1970
API: -[GPBDuration timeIntervalSince1970]
Ersatz: -[GPBDuration timeInterval]
GPBTextFormatForUnknownFieldSet
API: GPBTextFormatForUnknownFieldSet()
Ersatz: Obsolet - Verwenden Sie GPBTextFormatForMessage(), das alle unbekannten Felder enthält.
GPBUnknownFieldSet
API: GPBUnknownFieldSet
Ersatz: GPBUnknownFields
GPBMessage unknownFields
API: GPBMessage unknownFields Property
Ersatz: -[GPBUnknownFields initFromMessage:], -[GPBMessage mergeUnknownFields:extensionRegistry:error:] und -[GPBMessage clearUnknownFields]
Veraltete Runtime-APIs für alte Gencode entfernen
Diese Version entfernt veraltete Runtime-Methoden, die die Objective-C-Gencode vor der Version 3.22.x unterstützen. Die Bibliothek gibt auch eine Protokollmeldung zur Laufzeit aus, wenn alter generierter Code gestartet wird.
API: +[GPBFileDescriptor allocDescriptorForClass:file:fields:fieldCount:storageSize:flags:]
Ersatz: Mit einer aktuellen Version der Bibliothek neu generieren.
API: +[GPBFileDescriptor allocDescriptorForClass:rootClass:file:fields:fieldCount:storageSize:flags:]
Ersatz: Mit einer aktuellen Version der Bibliothek neu generieren.
API: +[GPBEnumDescriptor allocDescriptorForName:valueNames:values:count:enumVerifier:]
Ersatz: Mit einer aktuellen Version der Bibliothek neu generieren.
Ersatz: Mit einer aktuellen Version der Bibliothek neu generieren.
API: -[GPBExtensionDescriptor initWithExtensionDescription:]
Ersatz: Mit einer aktuellen Version der Bibliothek neu generieren.
Weitere Änderungen
Zusätzlich zu diesen Breaking Changes gibt es einige weitere erwähnenswerte Änderungen. Obwohl die folgenden Änderungen nicht als Breaking Changes betrachtet werden, können sie Benutzer dennoch beeinflussen.
Poison-Pill-Warnungen
v30 wird Poison Pills aktualisieren, um Warnungen für alte Gencode + neue Runtime-Kombinationen auszugeben, die unter der neuen Rolling-Upgrade-Richtlinie funktionieren, aber bei der *nächsten* Hauptversion zu Problemen führen. Zum Beispiel sollte Java 4.x.x Gencode gegen die 5.x.x Runtime funktionieren, aber eine Warnung vor bevorstehenden Problemen gegen die 6.x.x Runtime ausgeben.
Änderungen an der UTF-8-Erzwingung in C# und Ruby
v30 enthält eine Korrektur, um die UTF-8-Erzwingung sprachübergreifend konsistent zu machen. Benutzer mit fehlerhaften Nicht-UTF8-Daten in String-Feldern sehen möglicherweise früher UTF-8-Erzwingungsfehler.