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++サポートマトリックスに従い、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: +[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強制エラーがより早期に表面化する可能性があります。