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