2023年4月11日に発表された変更点

2023年4月11日にProtocol Buffersで発表された変更点。

シンタックスリフレクションの非推奨化

v23では、リフレクションによる構文バージョンの確認機能が非推奨になります。この非推奨化は、ビルド時に警告として含まれます。この機能は将来のリリースで削除される予定です。

C++でのctype=CORDのサポート追加

v23では、単一のbytesフィールド(oneofフィールドを含む)に対してctype=CORDサポートが追加され、データがstringではなくabsl::cordを使用して保存されるように指定できます。オープンソースコミュニティからの十分な関心があれば、将来のリリースで単一のstringフィールドタイプ、およびrepeatedstringおよびbyteフィールドに対してもサポートが追加される可能性があります。

ctype=CORDは拡張機能に影響を与えません。

フィールドオプションを使用してサポートを追加できます。

optional bytes foo = 25 [ctype=CORD];

オプションの保持

オプションには保持という概念が導入され、オプションが生成されたコードに残るかどうかが制御されます。オプションは常にデフォルトでランタイム保持されており、生成されたコードに残るため、ランタイムで生成されたディスクリプタプールから参照可能でした。しかし、今後はretention = RETENTION_SOURCEを設定することで、オプション(またはオプション内のフィールド)をランタイム時に保持しないように指定できます。これはソース保持と呼ばれます。

保持設定は次のようになります。

extend google.protobuf.FileOptions {
  optional int32 source_retention_option = 1234
      [retention = RETENTION_SOURCE];
}

これは通常のフィールドにも設定でき、その場合、そのフィールドがオプション内に現れる場合にのみ有効になります。

message OptionsMessage {
  optional int32 source_retention_field = 1 [retention = RETENTION_SOURCE];
}

詳細については、「オプションの保持」を参照してください。

Bazel <5.3 のサポート終了

v23では、Bazel 4のサポートが終了します。Protobufは引き続きBazel 5 LTSをサポートし、Bazel 5.3が最小必須バージョンとなります。これは、Foundational C++ Support Policyに記載されているビルドサポートポリシーに準拠しており、Foundational C++ Supportのバージョンに反映されています。