バージョン26.xのニュース発表
以下の発表はバージョン26.xに特有のものです。時系列で表示された情報については、ニュースを参照してください。
全般的な変更点
JSONフォーマッターオプションの変更
26.xシリーズより、JSONフォーマッターのデフォルト値フィールドを出力するオプションが、proto2とproto3のoptional
フィールドを一貫して処理する固定的な方法に置き換えられます。
- Java:
includingDefaultValueFields()
はalwaysPrintFieldsWithNoPresence()
に置き換えられます。 - C++:
always_print_default_values
はalways_print_fields_with_no_presence=True
に置き換えられます。 - Py:
including_default_value_fields=True
はalways_print_fields_with_no_presence=True
に置き換えられます。
新しいフラグはproto3メッセージでは古いフラグと同一の動作をしますが、proto2のoptional
フィールドには適用されなくなりました。古いフラグはproto2のoptional
フィールドには適用されましたが、proto3のoptional
フィールドには適用されませんでした。
生成コード/ランタイム不一致におけるポイズンピルの導入
クロスバージョンランタイム保証に従い、Protobufは、メジャーバージョン間で生成コードとランタイムを混在させること、または単一のメジャーランタイムバージョン内で新しいバージョンのprotocから生成されたコードを古いランタイムと混在させることをサポートしていません。これらの許可されない不一致を検出し、強制するために「ポイズンピル」を導入する予定です。
これは既存のポリシーの強制を追加するだけなので、破壊的変更とは見なされませんが、ユーザーは生成コードを更新する必要がある場合があります。
C++の破壊的変更
v26では、破壊的変更ポリシーおよびバージョンサポートポリシーに従い、C++のメジャーバージョンアップを計画しています。
以下のセクションでは、Protocol Buffersの26.0リリースに含める予定の破壊的変更のセットを概説します。計画は変更される可能性があり、実際に変更されることもあります。これらは認識しておくべき潜在的な破壊的変更ですが、この特定のリリースで発生しないか、全く発生しない可能性もあります。
繰り返しフィールドの非推奨clear APIの削除
以下の非推奨メソッドが削除されます。
RepeatedPtrField::ReleaseCleared()
RepeatedPtrField::ClearedCount()
RepeatedPtrField::AddCleared()
C++レガシー構文ディスクリプタAPIの削除
エディションのリリースにより、構文はビジネスロジックではサポートされなくなりました。代わりに、C++で機能をクエリするために、descriptor.h
で定義されている様々な機能ヘルパー(例:has_presence
など)を使用して、より的を絞った動作をクエリしてください。
非推奨構文アクセサーの削除
v26で非推奨の構文アクセサーFileDescriptor::Syntax
を削除する予定です。代わりにFileDescriptor::edition
からのゲッターを使用することをお勧めします。
非推奨のSupportsUnknownEnumValuesメソッドの削除
SupportsUnknownEnumValues
メソッドは2023年3月に非推奨になりました。v26で削除する予定です。
std::stringエラーコレクターオーバーライドの削除
エラーコレクターの非推奨std::string
メソッドを削除する予定です。
Javaの破壊的変更
v26では、破壊的変更ポリシーおよびバージョンサポートポリシーに従い、Javaのメジャーバージョンアップを計画しています。
以下のセクションでは、Protocol Buffersの26.0リリースに含める予定の破壊的変更のセットを概説します。計画は変更される可能性があり、実際に変更されることもあります。これらは認識しておくべき潜在的な破壊的変更ですが、この特定のリリースで発生しないか、全く発生しない可能性もあります。
古い生成コードとの互換性の破壊
v26.xは、古いメジャーバージョンから生成されたコードとの互換性を破壊します。ユーザーは、古い生成コードを同じバージョンで再生成する必要があります。
例えば、元々v2.x.xからv3.x.xランタイムへの後方互換性のために導入されたGeneratedMessageV3
は、GeneratedMessage
に改名されます。ランタイムはエディションをサポートするように更新されますが、これは古い生成コードとは互換性がありません。
これは既存のクロスバージョンランタイム保証に準拠しており、破壊的変更です。
非推奨メソッド/変数の削除
v26.xでは、非推奨のメソッドと変数へのアクセスが削除されます。これらは通常、以前のリリースで既に@Deprecated
とマークされています。
これにより、以下の非網羅的なリストへのアクセスが削除されます。
対応する機能アクセサー(
FieldDescriptor.hasPresence()
、EnumDescriptor.isClosed()
など)に置き換えられるべきDescriptor構文API。対応する
TextFormat.printer()
メソッドに置き換えられるべきTextFormat印刷メソッド。parser()
メソッドに置き換えられるべきPARSER変数。古いv2.x.x生成コードの互換性のためのランタイムメソッド。これは、クロスバージョンランタイム保証に従い、もはやサポートされません。
詳細については、対応するリリースノートで確認できます。
PHPの破壊的変更
26.xラインで以下の変更が計画されています。
- セッターにおける文字列フィールドのUTF-8検証。
- 汎用サービスの削除。(コミット 40ad3fa)
Pythonの破壊的変更
v26では、破壊的変更ポリシーおよびバージョンサポートポリシーに従い、Pythonのメジャーバージョンアップを計画しています。
26.xラインで以下の変更が計画されています。
str(msg)
が文字列フィールドの無効なUTF-8をエスケープするように変更します。text_format.MessageToString()
がデフォルトで生のUTF-8を出力し、無効なUTF-8シーケンスをエスケープするように変更します。- タイムスタンプの境界を修正(コミット 1250d5f)
非推奨APIの削除
26.xリリースで、以下の非推奨APIが削除されます。
NoneのIterableによる拡張繰り返しフィールドの拒否
26.xリリースから、None
のイテラブルで繰り返しフィールドを拡張することは拒否されます(TypeError
を発生させます)。例えば、m.repeated_int32.extend(None)
は拒否されます。
メッセージクラスからのRegisterExtensionの削除
26.xリリースから、RegisterExtension
は削除されます。Pythonでは、メッセージオブジェクトのExtensions
プロパティを使用して拡張機能にアクセスできます。
これは純粋なPythonとPythonのC++実装の両方に影響しますが、upb Pythonには影響しません。
GitHubからのsetup.py
およびsetup.cfg
サポートの削除
26.xリリースでは、GitHubリポジトリまたはGitHubリリースtarボールのpython/
ディレクトリにsetup.py
およびsetup.cfg
が存在しなくなります。これは、GitHubリポジトリまたはリリースtarボールから直接Pythonパッケージをビルドすることができなくなることを意味します。
PyPIで公開されているPythonソースパッケージには、引き続きトップレベルディレクトリにsetup.py
が含まれます。これは、PyPIで配布されているバイナリパッケージを使用しないユーザーにとって、Pythonバイナリパッケージをビルドするためのサポートされ推奨される方法です。
詳細については、#15671を参照してください。
タイムスタンプの有効性チェック
v26では、システムがTimestamp
値が有効かどうかをチェックします。秒は[-62135596800, 253402300799]の範囲内、ナノ秒は[0, 999999999]の範囲内である必要があります。これらの範囲外の値は例外を発生させます。
非推奨構文アクセサーの削除
v26で非推奨の構文アクセサーFileDescriptor.syntax
を削除する予定です。その代わりにFileDescriptor.edition
を追加する予定です。
UnknownFieldsサポートの削除
v25では、純粋なPythonおよびC++拡張機能でmessage.UnknownFields()
が非推奨になりました。v26でこれを削除する予定です。代わりにunknown_fields.py
の新しいUnknownFieldSet(message)
サポートを使用してください。
これらの変更のすべてに関する詳細情報は、対応するリリースノートで利用可能になります。
Rubyの破壊的変更
RepeatedField#each_index
が正しいセマンティクスを持つように修正しました。(#11767)- Ruby DSLと関連する互換性コードを削除します。これにより、4月に発表された移行が完了します。
Message#to_h
の修正- 設定されていないoneofフィールドを削除します。(#6167)
- 設定されていないサブメッセージフィールドを削除します。
encode_json
/decode_json
にメッセージのプールを使用します。- 非推奨の構文アクセサー
FileDescriptor.syntax
を削除し、その代わりに意味論的チェックを追加します。- フィールドに存在があるかをテストする
FieldDescriptor.has_presence
。 - 繰り返しフィールドがパックされているかをテストする
FieldDescriptor.is_packed
。 - 文字列フィールドがUTF-8検証を必要とするかをテストする
FieldDescriptor.requires_utf8_validation
。 - enumがクローズされているかをテストする
EnumDescriptor.is_closed
。
- フィールドに存在があるかをテストする
RubyにおけるFreezeの再帰化
26.xラインから、freezeが適用されると、すべてのサブメッセージ、マップ、繰り返しフィールドに影響を与えるように再帰的に適用されます。
upbの破壊的変更
26.xラインで以下の変更が計画されています。
IgnoreUnknownEnumString
が有効な場合にJSON解析における非準拠を修正しました。