バージョン 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
フィールドには適用されませんでした。
Gencode / ランタイムのミスマッチに対するポイズンピル
当社のクロスバージョンランタイム保証に基づき、Protobuf は、メジャーバージョン境界を越えた生成コードとランタイムの混在、または単一のメジャーランタイムバージョン内での新しいバージョンの protoc からの生成コードと古いランタイムの混在をサポートしていません。これらの許可されていないミスマッチを検出および強制するための「ポイズンピル」を導入する予定です。
これは既存のポリシーの強制を追加するだけなので、破壊的変更とは見なされませんが、ユーザーは生成コードの更新が必要になる場合があります。
C++ の破壊的変更
v26 では、当社の破壊的変更ポリシーおよびバージョンサポートポリシーに従い、C++ のメジャーバージョンアップを計画しています。
以下のセクションでは、protocol buffers の 26.0 リリースに含める予定の破壊的変更のセットの概要を示します。計画は変更される可能性があることに注意してください。これらは注意すべき潜在的な破壊的変更ですが、この特定のリリースで発生しない場合や、まったく発生しない場合もあります。
繰り返しのフィールドに対する非推奨の clear API を削除
以下の非推奨メソッドは削除されます
RepeatedPtrField::ReleaseCleared()
RepeatedPtrField::ClearedCount()
RepeatedPtrField::AddCleared()
C++ のレガシー構文記述子 API を削除
エディションのリリースに伴い、構文はビジネスロジックではサポートされなくなりました。代わりに、descriptor.h
で定義されているさまざまな機能ヘルパーを使用して、has_presence
などのよりターゲットを絞った動作をクエリして、C++ の機能をクエリします。
非推奨の構文アクセサーを削除
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
とマークされています。
これにより、以下の網羅的ではないリストへのアクセスが削除されます
記述子の構文 API。対応する機能アクセサー(
FieldDescriptor.hasPresence()
、EnumDescriptor.isClosed()
など)に置き換える必要があります。TextFormat print メソッド。対応する
TextFormat.printer()
メソッドに置き換える必要があります。PARSER 変数。
parser()
メソッドに置き換える必要があります。古い v2.x.x gencode 互換性のためのランタイムメソッド。これは、当社のクロスバージョンランタイム保証に従って、もはやサポートされていません。
詳細については、対応するリリースノートで入手できます。
PHP の破壊的変更
以下の変更が 26.x ラインで計画されています
- セッターの文字列フィールドの UTF-8 を検証します。
- 汎用サービスを削除します。((commit 40ad3fa)
Python の破壊的変更
v26 では、当社の破壊的変更ポリシーおよびバージョンサポートポリシーに従い、Python のメジャーバージョンアップを計画しています。
以下の変更が 26.x ラインで計画されています
str(msg)
が文字列フィールドの無効な UTF-8 をエスケープするようにします。text_format.MessageToString()
がデフォルトで生の UTF-8 を出力し、無効な UTF-8 シーケンスをエスケープするようにします。- タイムスタンプの境界を修正します(commit 1250d5f)
非推奨の API を削除
26.x リリースでは、以下の非推奨 API が削除されます
None イテラブルによる繰り返しのフィールドの拡張を拒否
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 リリースでは、setup.py
および setup.cfg
は、GitHub リポジトリまたは GitHub リリース tarball の python/
ディレクトリに存在しなくなります。これは、GitHub リポジトリまたはリリース tarball から直接 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 解析の非準拠を修正します。