バージョン26.xのニュース発表
以下の発表は、2024年3月13日にリリースされたバージョン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++のメジャーバージョンアップを計画しています。
以下のセクションでは、プロトコルバッファの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のメジャーバージョンアップを計画しています。
以下のセクションでは、プロトコルバッファの26.0リリースに含める予定の破壊的変更のセットを概説します。計画は変更される可能性があり、実際に変更されます。これらは注意すべき潜在的な破壊的変更ですが、この特定のリリースで発生しない可能性や、まったく発生しない可能性もあります。
古い生成コードとの互換性の破壊
v26.xは、古いメジャーバージョンからの生成コードとの互換性を破棄します。ユーザーは、古い生成コードを同じバージョンから再生成する必要があります。
例えば、元々v2.x.xからの生成コードとv3.x.xランタイムとの後方互換性のために導入されたGeneratedMessageV3は、GeneratedMessageに改名されます。ランタイムは「エディション」をサポートするように更新され、古い生成コードとは互換性がなくなります。
これは既存の「クロスバージョンランタイム保証」に準拠しており、破壊的変更です。
非推奨のメソッド/変数の削除
v26.xでは、非推奨のメソッドと変数へのアクセスを削除します。これらは通常、以前のリリースで既に@Deprecatedとマークされています。
これにより、以下の非網羅的なリストへのアクセスが削除されます
対応する機能アクセサー(例:
FieldDescriptor.hasPresence()、EnumDescriptor.isClosed())に置き換えるべきディスクリプタ構文API対応する
TextFormat.printer()メソッドに置き換えるべきTextFormatのprintメソッドparser()メソッドに置き換えるべきPARSER変数古いv2.x.xのgencode互換性ランタイムメソッド。これは、「クロスバージョンランタイム保証」に従い、もはやサポートされていません。
詳細については、対応するリリースノートで確認できます。
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が削除されます
繰り返しフィールドへのiterable以外の拡張を拒否
26.xリリースから、繰り返しフィールドをNoneのiterableで拡張することは拒否されます(TypeErrorが発生します)。例えば、m.repeated_int32.extend(None)は拒否されます。
メッセージクラスからのRegisterExtensionの削除
26.xリリースから、RegisterExtensionは削除されます。Pythonで拡張機能にアクセスするには、メッセージオブジェクトのExtensionsプロパティを使用できます。
これは純粋なPythonとC++によるPythonの実装の両方に影響しますが、upb Pythonには影響しません。
GitHubからのsetup.pyおよびsetup.cfgサポートの削除
26.xリリースでは、GitHubリポジトリのpython/ディレクトリまたはGitHubのリリースターボールにsetup.pyとsetup.cfgは存在しなくなります。これは、GitHubリポジトリまたはリリースターボールから直接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で繰り返しフィールドがパックされているかテストします。FieldDescriptor.requires_utf8_validationで文字列フィールドがUTF-8検証を必要とするかテストします。EnumDescriptor.is_closedで列挙型が閉じているかテストします。
RubyでFreezeが再帰的になる
26.xラインから、freezeが適用されると再帰的に適用され、すべてのサブメッセージ、マップ、繰り返しフィールドに影響します。
upbの破壊的変更
26.xラインで以下の変更が計画されています
IgnoreUnknownEnumStringが有効な場合のJSON解析における非準拠を修正しました。