2023年4月11日発表の変更

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

構文リフレクションの非推奨化

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

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

v23 では、単数 `bytes` フィールド(`oneof` フィールドを含む)に `ctype=CORD` のサポートが追加され、データが string の代わりに `absl::cord` を使用して保存されるように指定できます。オープンソースコミュニティからの十分な関心があれば、将来のリリースで単数 `string` フィールドタイプ、および `repeated` `string` および `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 のバージョンに反映されているとおりです。