2024年10月2日に発表された変更点
以下のセクションでは、2025年第1四半期に予定されているv30リリースでの計画されている破壊的変更について説明します。これらは実装されると予想される変更点について説明していますが、ソフトウェアの柔軟な性質上、これらの変更の一部は実装されないか、このトピックで説明されている内容と異なる場合があります。
C++における変更点
C++は、メジャーバージョンを5.29.xから6.30.xに引き上げます。
記述子API
v30では、記述子(full_name
など)の戻り値の型がabsl::string_view
に更新されます。これにより、記述子のメモリ削減が可能になります。
v28で導入されたPROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE
マクロは、破壊的リリースに先立って更新された戻り値の型を有効にするために、それまでの間使用できます。v30リリースでは、このデフォルトが反転され、マクロが削除されます。
FieldDescriptorオプションからのctype削除
v30では、FieldDescriptor
オプションからのctype
の公開を停止します。代わりに、v28リリースで追加されたFieldDescriptor::cpp_string_type()
APIを使用できます。
CMakeサブモジュールをフェッチされた依存関係に置き換え
v30では、サブモジュールが削除され、upbの古いCMakeパターンである依存関係のフェッチに切り替わります。
インストール済みのパッケージを使用している場合、影響はありません。一部のCMakeワークフローが破損する可能性があります。
非推奨APIの削除
v30では、少なくとも1回のマイナーまたはメジャーリリースで非推奨(ABSL_DEPRECATED
など)としてマークされ、廃止または置き換えられた以下の公開ランタイムAPIが削除されます。
Arena::CreateMessage
API: Arena::CreateMessage
代替: Arena::Create
Arena::GetArena
API: Arena::GetArena
代替: value->GetArena()
RepeatedPtrField::ClearedCount
API: RepeatedPtrField::ClearedCount
代替: アリーナへの移行(移行ガイド)。
JsonOptions
API: JsonOptions
代替: JsonPrintOptions
C++14サポートの終了
このリリースでは、Foundational C++サポートマトリックスに従い、C++14の最小サポートバージョンを廃止し、17に引き上げます。
当社のポリシーに従い、これを破壊的変更とはみなしていません。
JRubyにおける変更点
v30では、JRubyのデフォルト実装がFFIに切り替わります。これは一部のJRubyユーザーにとって破壊的な変更となる可能性があります。
JRubyは公式にサポートされていないため、この変更がRubyのメジャーバージョンを上げるものではないことに注意してください。
Pythonにおける変更点
Pythonは、メジャーバージョンを5.29.xから6.30.xに引き上げます。
Python 3.8サポートの終了
当社の公式Pythonサポートポリシーに従い、Python 3.8以前のサポートを終了します。これは、最小サポートPythonバージョンが3.9であることを意味します。
bazel/system_python.bzlエイリアスの削除
v30では、レガシーなbazel/system_python.bzl
エイリアスが削除されます。
system_python.bzl
への直接参照を削除し、代わりにprotobuf_deps.bzl
を使用してください。直接参照が必要な場合は、v5.27.0で移動されたpython/dist/system_python.bzl
を使用してください。
フィールドセッターの検証変更
Pythonとupbのフィールドセッターは、v30でエディション2023のクローズドenumを検証するように修正されます。無効な値で更新されたクローズドenumフィールドはエラーを生成します。
非推奨APIの削除
v30では、少なくとも1回のマイナーまたはメジャーリリースで非推奨とマークされ、廃止または置き換えられた以下の公開ランタイムAPIが削除されます。
リフレクションメソッド
API: reflection.ParseMessage
, reflection.MakeClass
代替: message_factory.GetMessageClass()
RPCサービスインターフェース
API: service.RpcException
, service.Service
, service.RpcController
, および service.RpcChannel
代替: バージョン2.3.0以降、RPC実装はこれらに基づいて構築しようとせず、特定のRPC実装に特化したコードを生成するコードジェネレータープラグインを提供する必要があります。
MessageFactoryおよびSymbolDatabaseメソッド
API: MessageFactory.GetPrototype
, MessageFactory.CreatePrototype
, MessageFactory.GetMessages
, SymbolDatabase.GetPrototype
, SymbolDatabase.CreatePrototype
, および SymbolDatabase.GetMessages
代替: message_factory.GetMessageClass()
および message_factory.GetMessageClassesForFiles()
。
GetDebugString
API: GetDebugString
代替
代替なし。これはPython C++にのみ存在し、現在はリリースされていません。ピュアPythonまたはUPBではサポートされていません。
Objective-Cにおける変更点
これはObjective-Cにとって最初の破壊的リリースとなります.
Objective-Cは、メジャーバージョンを3.x.xから4.30.xに引き上げます。
既存APIのほとんどを非推奨とする不明なフィールド処理APIの全面改訂
v30では、GPBUnknownFieldSet
が非推奨となり、GPBUnknownFields
に置き換えられます。新しい型は、元の入力またはAPI呼び出しからの不明なフィールドの順序を保持し、メッセージが書き出されたときにその順序のセマンティックな意味が維持されるようにします。
これに伴い、GPBUnknownField
型もAPIが変更され、既存のAPIのほとんどが非推奨となり、新しいAPIが追加されます。
非推奨のプロパティAPI
varintList
fixed32List
fixed64List
lengthDelimitedList
groupList
非推奨の変更API
addVarint
addFixed32
addFixed64
addLengthDelimited
addGroup
非推奨の初期化子 initWithNumber:
。
新しいプロパティAPI
type
varint
fixed32
fixed64
lengthDelimited
group
この型は、特定のフィールド番号のすべての値を*グループ化*するのではなく、その値に単一のフィールド番号をモデル化します。新しいフィールドを作成するためのAPIは、GPBUnknownFields
クラスのadd*
APIです。
v30では、-[GPBMessage unknownFields]
も非推奨となります。代わりに、メッセージの不明なフィールドを抽出および更新するための新しいAPIが提供されます。
非推奨APIの削除
v30では、少なくとも1回のマイナーまたはメジャーリリースで非推奨とマークされ、廃止または置き換えられた以下の公開ランタイムAPIが削除されます。
GPBFileDescriptor
API: -[GPBFileDescriptor
syntax]
代替: 廃止。
GPBMessage mergeFrom:extensionRegistry
API: -[GPBMessage mergeFrom:extensionRegistry:
]
代替: -[GPBMessage mergeFrom:extensionRegistry:error:
]
GPBDuration timeIntervalSince1970
API: -[GPBDuration timeIntervalSince1970
]
代替: -[GPBDuration timeInterval
]
GPBTextFormatForUnknownFieldSet
API: GPBTextFormatForUnknownFieldSet()
代替: 廃止 - 不明なフィールドを含むGPBTextFormatForMessage()
を使用してください。
GPBUnknownFieldSet
API: GPBUnknownFieldSet
代替: GPBUnknownFields
GPBMessage unknownFields
API: GPBMessage unknownFields
プロパティ
代替: -[GPBUnknownFields initFromMessage:
], -[GPBMessage mergeUnknownFields:extensionRegistry:error:
], および -[GPBMessage clearUnknownFields
]
古いgencode用非推奨ランタイムAPIの削除
このリリースでは、3.22.xリリース以前のObjective-C gencodeをサポートする非推奨のランタイムメソッドが削除されます。また、古い生成コードが起動する際に、ライブラリはランタイムでログメッセージを発行します。
API: +[GPBFileDescriptor allocDescriptorForClass:file:fields:fieldCount:storageSize:flags:]
代替: ライブラリの現在のバージョンで再生成してください。
API: +[GPBFileDescriptor allocDescriptorForClass:rootClass:file:fields:fieldCount:storageSize:flags:]
代替: ライブラリの現在のバージョンで再生成してください。
API: +[GPBEnumDescriptor allocDescriptorForName:valueNames:values:count:enumVerifier:]
代替: ライブラリの現在のバージョンで再生成してください。
代替: ライブラリの現在のバージョンで再生成してください。
API: -[GPBExtensionDescriptor initWithExtensionDescription:]
代替: ライブラリの現在のバージョンで再生成してください。
その他の変更点
これらの破壊的変更に加えて、注目すべきその他の変更点もあります。以下の変更は破壊的変更とは見なされませんが、ユーザーに影響を与える可能性があります。
ポイズンピル警告
v30では、ポイズンピルが更新され、新しいローリングアップグレードポリシーの下で動作するものの、*次*のメジャーバージョンアップで破損する古いgencodeと新しいランタイムの組み合わせに対して警告を発するようになります。たとえば、Java 4.x.x gencodeは5.x.xランタイムでは動作するはずですが、6.x.xランタイムに対する今後の破損について警告します。
C#およびRubyにおけるUTF-8強制の変更
v30では、UTF-8の強制を言語間で一貫させるための修正が含まれます。文字列フィールドに不正な非UTF-8データを持つユーザーは、UTF-8強制エラーがより早期に表面化する可能性があります。