2024年10月2日に発表された変更点

2024年10月2日に Protocol Buffers に対して発表された変更点。

以下のセクションでは、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: +[GPBEnumDescriptor allocDescriptorForName:valueNames:values:count:enumVerifier:extraTextFormatInfo:]

代替: ライブラリの現在のバージョンで再生成してください。

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 強制エラーが以前よりも早く表面化する可能性があります。