2024年11月7日に発表された変更点
以下のセクションでは、2025年第1四半期に予定されているv30リリースでの破壊的な変更点について説明します。また、破壊的ではないものの、ユーザー側で対応が必要となる可能性がある変更点も含まれています。これらは、10月2日のニュース記事に記載されているものに加えての変更点です。
これらは、実装が予定されている変更点を記述したものですが、ソフトウェアの柔軟な性質上、これらの変更点の一部は実装されないか、このトピックで記述されている内容と異なる場合があります。
アリーナ上のOneofメッセージをクリアした後、ASANポイズニングを導入
この変更により、アリーナを使用するC++ protobufに影響を与える強化チェックが追加されます。protobufアリーナに割り当てられたOneofメッセージは、デバッグモードではクリアされ、ASANモードではポイズニングされます。clearを呼び出した後、そのメモリ領域を使用しようとすると、ASANでuse-after-freeエラーとしてクラッシュが発生します。
この実装にはC++17が必要です。
Python のマップフィールドに対する setdefault の動作変更
v30から、`setdefault`は`ScalarMap`の`dict`に似ていますが、キーと値の両方が設定されている必要があります。`MessageMaps`では`setdefault`は拒否されます。
非推奨のpy_proto_libraryマクロを削除
`protobuf.bzl`内の非推奨の内部`py_proto_library` Bazelマクロはv30.xで削除されます。
これは、v29.xから`bazel/py_proto_library`に移動される公式の`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パースにおける非準拠を修正します。
この修正に伴うメジャーバージョンの引き上げはありませんが、RubyとPHPでは、数値フィールド内の非数値文字列(例: ""、"12abc"、"abc")に対してエラーが発生するようになります。v29.xでは、これらのエラーケースに対して警告が含まれます。