2024年11月7日に発表された変更点
以下のセクションでは、2025年第1四半期に予定されているv30リリースでの破壊的変更について説明します。破壊的ではないものの、ユーザー側での対応が必要となる可能性のある変更点も含まれます。これらは、10月2日のニュース記事で言及されている内容に追加されるものです。
これらは、実装が予想される変更について説明していますが、ソフトウェアの柔軟な性質上、これらの変更の一部は実装されないか、このトピックで説明されている内容と異なる場合があります。
アリーナ上のOneofメッセージクリア後のASANポイズニング導入
この変更により、アリーナを使用するC++ protobufに影響を与える強化チェックが追加されます。protobufアリーナに割り当てられたOneofメッセージは、デバッグモードではクリアされ、ASANモードではポイズニングされるようになります。clear呼び出し後、そのメモリ領域を将来使用しようとすると、ユース・アフター・フリーエラーとしてASANでクラッシュが発生します。
この実装はC++17を必要とします。
MapフィールドにおけるPython setdefaultの動作変更
v30以降、`setdefault`は`ScalarMap`において`dict`と同様になりますが、キーと値の両方を設定する必要があります。`MessageMaps`では`setdefault`は拒否されます。
非推奨の py_proto_library マクロの削除
非推奨の内部 `py_proto_library` Bazel マクロ (`protobuf.bzl` 内) はv30.xで削除されます。
これは、v29.x以降、`bazel/py_proto_library` 内のprotobufに移動される公式の`py_proto_library`に置き換えられる必要があります。この実装は、v29.xより前は`rules_python`で利用可能でした。
Pythonのネストされたメッセージクラス__qualname__がアウターメッセージ名を含む
Pythonのネストされたメッセージクラス`__qualname__`は、外側のメッセージ名を含むようになりました。v30より前は、ネストされたメッセージの場合、`__qualname__`は`__name__`と同じ結果で、外側のメッセージ名は含まれていませんでした。
例:
message Foo {
message Bar {
bool bool_field = 1;
}
}
nested = test_pb2.Foo.Bar()
self.assertEqual('Bar', nested.__class__.__name__)
self.assertEqual('Foo.Bar', nested.__class__.__qualname__) # It was 'Bar' before
C++ CocoaPods リリースの提供終了
v30では、v4.x.x以降破損していたC++ CocoaPodsリリースは提供終了となります。C++ユーザーは、代わりに当社のGitHubリリースを直接使用する必要があります。
JSONパースにおけるRubyおよびPHPのエラー
v30では、JSON仕様に従い、数値フィールド内の文字列のJSONパースにおける非準拠を修正します。
この修正にはメジャーバージョンアップは伴いませんが、数値フィールド内の非数値文字列(例: 「」、 「12abc」、「abc」)に対してRubyとPHPでエラーが発生するようになります。v29.xでは、これらのエラーケースに対して警告が含まれます。