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++ Support matrix に従って、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
エイリアスが削除されます。
protobuf_deps.bzl
を代わりに使用するために、system_python.bzl
への直接参照を削除します。直接参照が必要な場合は、v5.27.0 で移動された python/dist/system_python.bzl
を使用してください。
フィールドセッターの検証の変更
Python および upb のフィールドセッターは、edition 2023 でクローズド enum を検証するように v30 で修正されます。無効な値で更新されたクローズド 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 強制エラーが以前よりも早く表面化する可能性があります。