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のバージョンに反映されています。