移行ガイド

ライブラリのバージョンに加えられた互換性のない変更のリストと、変更に対応するためにコードを更新する方法。

v30.0 での変更点

以下は、ライブラリのバージョンに加えられた互換性のない変更のリストと、変更に対応するためにコードを更新する方法です。

これは、v30.x の新着情報およびv30.0 のリリースノートで発表された互換性のない変更を対象としています。

CMake サブモジュールからフェッチされた依存関係への置き換え

以前は、デフォルトの CMake の動作として Git サブモジュールを使用して固定された依存関係を取得していました。-Dprotobuf_ABSL_PROVIDER=package を指定すると、CMake の設定が Abseil のローカルインストールを検索するように切り替わりました(jsoncpp と gtest にも同様のオプションがあります)。これらのオプションは廃止され、デフォルトの動作は、まずすべての依存関係のインストールを検索し、必要に応じて GitHub から固定バージョンをフェッチするようにフォールバックします。

フォールバックフェッチを防止するには(以前の package の動作と同様)、CMake を次のように呼び出します。

cmake . -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON

依存関係を固定バージョンから_常に_フェッチするには(以前のデフォルトの動作と同様)、CMake を次のように呼び出します。

cmake . -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON

string_view 戻り値の型

以下の記述子 API の戻り値の型が absl::string_view になり、メモリを節約できるようになりました。

  • MessageLite::GetTypeName
  • UnknownField::length_delimited
  • FieldDescriptor::full_name など、記述子 API の名前関数

今後の互換性のないリリースでは、さらに多くの API が absl::string_view に移行される予定です。

ほとんどの場合、安全な場合は型を absl::string_view を使用するように更新するか、必要な場合は明示的に元の型にコピーするようにしてください。この型が関数で返される場合は、呼び出し元も更新する必要がある場合があります。

影響を受ける API メソッドによって返される文字列が次のように使用されている場合

移行

std::string

既存の動作を維持するために、明示的に std::string に変換します。

または、よりパフォーマンスの高い absl::string_view に切り替えます。

const std::string&

absl::string_view に移行します。

実行不可能な場合(多数の依存関係のためなど)、std::string にコピーする方が簡単かもしれません。

const std::string*

const char*

ヌル許容の場合は、std::optional<absl::string_view> に移行します。

そうでない場合は、absl::string_view に移行します。

absl::string_view は null 終端が保証されていないため、data() を呼び出す際には注意してください。

一般的なコンテナやその他の API の場合、absl::string_view と互換性のあるバリアントに移行できる場合があります。以下に一般的な例をいくつか示します。

カテゴリ移行前移行
std::vector<std::string> への挿入

push_back()

push_front()

push()

emplace_back()

emplace_front()

emplace()

マップまたはセットへの挿入

set.insert(key)

map.insert({key, value})

map.insert({key,
{value_params...}})

set.emplace(key)

map.emplace(key, value)

map.try_emplace(key,
value_params...)

マップまたはセットのルックアップ

find()

count()

contains()

Abseil コンテナに移行します。

または、透過的な比較演算子を定義します。

std::set<std::string, std::less<>>
std::map<std::string, T, std::less<>>

https://abseil.io/tips/144 を参照してください。

文字列連結

operator+

operator+=

absl::StrCat()

absl::StrAppend()

これらはパフォーマンス上の理由からいずれにしても推奨されます。https://abseil.io/tips/3 を参照してください。

absl::string_view の使用に関する一般的なヒントについては、https://abseil.io/tips/1 も参照してください。

MSVC + Bazel のポイズニング

Windows の Bazel ユーザーは、こののように、プロジェクトに以下を追加して clang-cl を使用するように切り替える必要があります。

.bazelrc

common --enable_platform_specific_config build:windows
--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl
--extra_execution_platforms=//:x64_windows-clang-cl

MODULE.bazel

bazel_dep(name = "platforms", version = "0.0.10")
bazel_dep(name = "rules_cc", version = "0.0.17")

# For clang-cl configuration
cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension")
use_repo(cc_configure, "local_config_cc")

WORKSPACE

load("//:protobuf_deps.bzl", "PROTOBUF_MAVEN_ARTIFACTS", "protobuf_deps")

protobuf_deps()

load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies", "rules_cc_toolchains")

rules_cc_dependencies()

rules_cc_toolchains()

BUILD

Bazel 8 のみとの互換性が必要なユーザー向け。

platform(
    name = "x64_windows-clang-cl",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:windows",
        "@bazel_tools//tools/cpp:clang-cl",
    ],
)

Bazel 7 および 8 との互換性が必要なユーザー向け。

platform(
    name = "x64_windows-clang-cl",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:windows",
        # See https://github.com/bazelbuild/rules_cc/issues/330.
        "@rules_cc//cc/private/toolchain:clang-cl",
    ],
)

ユーザーは、次の互換性のないリリースまで、オプトアウトフラグ --define=protobuf_allow_msvc=true を設定することで、一時的にエラーを抑制することもできます。

あるいは、MSVC を使い続けたいユーザーは、CMake に切り替えることもできます。Visual Studio を使用するか、CMake コマンドラインに MSVC ジェネレーターを指定することで実行できます。例:

cmake -G "Visual Studio 17 2022" -A Win64 .

FieldDescriptor オプションから ctype を削除

FieldDescriptor オプションから ctype を公開するのをやめました。代わりに、v28 リリースで追加された FieldDescriptor::cpp_string_type() API を使用できます。

機密フィールドを削除するようにデバッグ API を変更

Protobuf C++ デバッグ API(Protobuf AbslStringify、proto2::ShortFormatproto2::Utf8FormatMessage::DebugStringMessage::ShortDebugStringMessage::Utf8DebugString を含む)は、debug_redact で注釈付けされた機密フィールドを削除するように変更されました。これらの API の出力にはプロセスごとのランダムなプレフィックスが含まれており、Protobuf TextFormat パーサーによって解析できなくなりました。ユーザーは、人間が読める出力が必要なほとんどの場合(ログ記録など)には新しい削除されたデバッグ形式を採用するか、シリアル化およびデシリアル化にはバイナリ形式に切り替えることを検討する必要があります。古いデシリアル化可能な形式が必要なユーザーは TextFormat.printer().printToString(proto) を使用できますが、これは機密フィールドを削除しないため、注意して使用する必要があります。

この件については、2024 年 12 月 4 日にリリースされたニュース記事で詳しく読むことができます。

非推奨 API の削除

少なくとも 1 つのマイナーまたはメジャーリリースで非推奨(ABSL_DEPRECATED など)とマークされ、廃止または置き換えられた以下の公開ランタイム API を削除しました。

API: Arena::CreateMessage

代替: Arena::Create

API: Arena::GetArena

代替: value->GetArena()

API: RepeatedPtrField::ClearedCount

代替: Arenaに移行してください(移行ガイド)。

API: JsonOptions

代替: JsonPrintOptions

C++14 のサポート終了

このリリースでは、Foundational C++ Support matrix に従って、C++ 14 の最小サポートバージョンを廃止し、C++ 17 に引き上げました。

ユーザーは C++17 にアップグレードする必要があります。

Arena 上の Oneof メッセージをクリアした後の ASAN ポイズニングの導入

この変更により、Arena を使用する C++ Protobuf に影響する強化チェックが追加されました。Protobuf Arena に割り当てられた Oneof メッセージは、デバッグモードではクリアされ、ASAN モードではポイズニングされます。クリアした後、メモリ領域を使用しようとすると、use-after-free エラーとして ASAN でクラッシュが発生します。

この実装には C++17 が必要です。

C++ CocoaPods リリースの終了

v4.x.x 以降機能していなかった C++ CocoaPods リリースは廃止されました。C++ ユーザーは、代わりに当社の GitHub リリースを直接使用する必要があります。

Pythonでの変更

Python のメジャーバージョンが 5.29.x から 6.30.x に上がりました。

Python 3.8 のサポート終了

最小サポート Python バージョンは 3.9 です。ユーザーはアップグレードする必要があります。

bazel/system_python.bzl エイリアスの削除

従来の bazel/system_python.bzl エイリアスを削除しました。

system_python.bzl への直接参照を削除し、代わりに protobuf_deps.bzl を使用してください。直接参照が必要な場合は、v5.27.0 で移動された python/dist/system_python.bzl を使用してください。

フィールドセッターの検証に関する変更

Python と upb のフィールドセッターは、エディション 2023 のクローズド列挙型を検証するようになりました。無効な値で更新されたクローズド列挙型フィールドはエラーを生成します。

非推奨の py_proto_library マクロの削除

protobuf.bzl 内の非推奨の内部 py_proto_library Bazel マクロが削除されました。これは、v29.x で protobuf の bazel/py_proto_library に移動された公式の py_proto_library に置き換えられました。この実装は、v29.x より前は rules_python で利用可能でした。

非推奨APIの削除

少なくとも 1 つのマイナーまたはメジャーリリースで非推奨とマークされていた以下の公開ランタイム API を削除しました。

リフレクションメソッド

API: reflection.ParseMessage, reflection.MakeClass

代替: message_factory.GetMessageClass()

RPCサービスインターフェース

API: service.RpcException, service.Service, service.RpcController, および service.RpcChannel

代替: バージョン2.3.0以降、RPC実装はこれらをベースに構築しようとせず、代わりに特定のRPC実装に固有のコードを生成するコードジェネレータプラグインを提供すべきです。

MessageFactoryおよびSymbolDatabaseメソッド

API: MessageFactory.GetPrototype, MessageFactory.CreatePrototype, MessageFactory.GetMessages, SymbolDatabase.GetPrototype, SymbolDatabase.CreatePrototype, および SymbolDatabase.GetMessages

代替: message_factory.GetMessageClass() および message_factory.GetMessageClassesForFiles()

GetDebugString

API: GetDebugString

代替

代替はありません。これはもはやリリースされていないPython C++にのみ存在します。Pure PythonやUPBではサポートされていません。

Python のマップフィールドに対する setdefault の動作変更

setdefaultScalarMapdict と似ていますが、キーと値の両方を設定する必要がある点が異なります。MessageMapssetdefault は拒否されます。

Python のネストされたメッセージクラスの __qualname__ が外側のメッセージ名を含むように

Python ネストされたメッセージクラス __qualname__ は、外側のメッセージ名を含むようになりました。以前は、__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

Objective-Cでの変更

これは Objective-C の最初の互換性のないリリースです.

Objective-C はメジャーバージョンを 3.x.x から 4.30.x に引き上げました。

未知フィールド処理 API の見直しと既存 API のほとんどの非推奨化

GPBUnknownFieldSet を非推奨とし、GPBUnknownFields に置き換えました。新しい型は、元の入力または API 呼び出しからの未知フィールドの順序を保持し、メッセージが書き出される際に順序に関する意味論的意味が維持されるようにします。

これに伴い、GPBUnknownField 型も API の変更があり、既存の API のほとんどが非推奨となり、新しい API が追加されました。

非推奨のプロパティAPI

  • varintList
  • fixed32List
  • fixed64List
  • lengthDelimitedList
  • groupList

非推奨の変更API

  • addVarint
  • addFixed32
  • addFixed64
  • addLengthDelimited
  • addGroup

非推奨のイニシャライザ initWithNumber:

新しいプロパティAPI

  • type
  • varint
  • fixed32
  • fixed64
  • lengthDelimited
  • group

この型は、特定のフィールド番号のすべての値を_グループ化_するのではなく、その値に単一のフィールド番号をモデル化します。新しいフィールドを作成するための API は、GPBUnknownFields クラスの add* API です。

また、-[GPBMessage unknownFields] も非推奨としました。代わりに、メッセージの未知フィールドを抽出および更新するための新しい API があります。

非推奨 API の削除

少なくとも 1 つのマイナーまたはメジャーリリースで非推奨とマークされていた以下の公開ランタイム API を削除しました。

GPBFileDescriptor

API: -[GPBFileDescriptor syntax]

代替: 廃止されました。

GPBMessage mergeFrom:extensionRegistry

API: -[GPBMessage mergeFrom:extensionRegistry:]

代替: -[GPBMessage mergeFrom:extensionRegistry:error:]

GPBDuration timeIntervalSince1970

API: -[GPBDuration timeIntervalSince1970]

代替: -[GPBDuration timeInterval]

GPBTextFormatForUnknownFieldSet

API: GPBTextFormatForUnknownFieldSet()

代替: 廃止 - 未知フィールドを含む GPBTextFormatForMessage() を使用してください。

GPBUnknownFieldSet

API: GPBUnknownFieldSet

代替: GPBUnknownFields

GPBMessage unknownFields

API: GPBMessage unknownFieldsプロパティ

代替: -[GPBUnknownFields initFromMessage:], -[GPBMessage mergeUnknownFields:extensionRegistry:error:], および -[GPBMessage clearUnknownFields]

古い gencode の非推奨ランタイム API の削除

このリリースでは、3.22.x リリース以前の Objective-C gencode をサポートしていた非推奨のランタイムメソッドが削除されました。また、古い生成されたコードが起動すると、ライブラリはランタイムでログメッセージを発行します。

API: +[GPBFileDescriptor allocDescriptorForClass:file:fields:fieldCount:storageSize:flags:]

代替: ライブラリの最新バージョンで再生成してください。

API: +[GPBFileDescriptor allocDescriptorForClass:rootClass:file:fields:fieldCount:storageSize:flags:]

代替: ライブラリの最新バージョンで再生成してください。

API: +[GPBEnumDescriptor allocDescriptorForName:valueNames:values:count:enumVerifier:]

代替: ライブラリの最新バージョンで再生成してください。

API: +[GPBEnumDescriptor allocDescriptorForName:valueNames:values:count:enumVerifier:extraTextFormatInfo:]

代替: ライブラリの最新バージョンで再生成してください。

API: -[GPBExtensionDescriptor initWithExtensionDescription:]

代替: ライブラリの最新バージョンで再生成してください。

ポイズンピルの警告

毒薬(poison pills)を更新し、新しいローリングアップグレードポリシーの下で機能するものの、_次の_メジャーバージョンアップで互換性がなくなる古い gencode と新しいランタイムの組み合わせについて警告を発するようにしました。たとえば、Python 4.x.x gencode は 5.x.x ランタイムに対して機能するはずですが、6.x.x ランタイムに対しては今後の互換性破壊について警告を発します。

C#とRubyにおけるUTF-8強制の変更

UTF-8 エンフォースメントを言語間で一貫させるための修正を加えました。文字列フィールドに不正な非 UTF-8 データを持つユーザーは、UTF-8 エンフォースメントエラーがより早期に表面化する可能性があります。

JSON 解析における Ruby と PHP のエラー

JSON 仕様に従い、数値フィールド内の文字列の JSON 解析における非適合性を修正しました。

この修正はメジャーバージョンアップを伴いませんが、Ruby と PHP は数値フィールド内の非数値文字列("""12abc""abc" など)に対してエラーを発生させるようになりました。v29.x には、これらのエラーケースに対する警告が含まれています。

v22.0 でのコンパイラの変更

JSON フィールド名の競合

変更のソース: PR #11349PR #10750

JSON マッピングに関するフィールド名の競合の処理方法を微妙に変更しました。proto3 では、制限を部分的に緩和し、フィールド名が大文字と小文字を区別する JSON マッピング(元の名前のキャメルケース)を生成する場合にのみエラーを発生させます。また、json_name オプションもチェックし、大文字と小文字を区別する競合に対してエラーを発生させるようになりました。proto2 では、制限を少し厳しくし、2 つの json_name 指定が競合する場合はエラーを発生させます。暗黙的な JSON マッピング(キャメルケース)に競合がある場合は、proto2 で警告を発生させます。

レガシーな動作を復元するためのメッセージ/enum オプションを一時的に提供しました。競合するフィールドの名前変更をすぐに実行できない場合は、特定のメッセージ/enum に deprecated_legacy_json_field_conflicts オプションを設定してください。このオプションは今後のリリースで削除されますが、移行のための時間を稼ぐことができます。

v22.0 での C++ API の変更

4.22.0 には、8月に発表されたC++ ランタイムと protoc の互換性のない変更が含まれています。

Autotools の停止

変更のソース: PR #10132

v22.0 では、protobuf コンパイラと C++ ランタイムからすべての Autotools サポートを削除しました。これらのいずれかをビルドするために Autotools を使用している場合は、CMake または Bazel に移行する必要があります。CMake で protobuf をセットアップするための専用の手順がいくつかあります。

Abseil 依存関係

変更のソース: PR #10416

v22.0 では、Abseil に明示的に依存するようになりました。これにより、以前は Abseil になった古い内部コードから分岐したスタブのほとんどを削除できました。いくつかの微妙な動作変更がありますが、ほとんどのユーザーには透過的であるはずです。注目すべき変更点は次のとおりです。

  • string_view - absl::string_view は、多くの API で const std::string& に置き換えられました。これは入力引数で最も一般的に使用され、ユーザーには目立った変更はないはずです。いくつかのケース(仮想メソッド引数や戻り値の型など)では、新しいシグネチャを使用するために明示的な変更が必要になる場合があります。

  • tables - STL のセット/マップの代わりに、Abseil の flat_hash_mapflat_hash_setbtree_mapbtree_set を使用するようになりました。これらはより効率的で、異種ルックアップを可能にします。これはほとんどのユーザーには見えないはずですが、テーブルの順序に関連する微妙な動作変更を引き起こす可能性があります。

  • logging - Abseil のロギングライブラリは、古いロギングコードと非常によく似ており、わずかに綴りが異なるだけです(例: GOOGLE_CHECK の代わりに ABSL_CHECK)。最大のGは、例外をサポートせず、FATAL アサーションが失敗すると常にクラッシュするようになったことです。(以前は、例外に切り替えるための PROTOBUF_USE_EXCEPTIONS フラグがありました。)これらは深刻な問題が発生した場合にのみ発生するため、無条件のクラッシュが適切な応答であると考えています。

    ロギング変更のソース: PR #11623

  • ビルド依存関係 - 新しいビルド依存関係は、常に下流のユーザーに互換性の問題を引き起こす可能性があります。ビルドには Abseil LTS 20230125 以降が必要です。

    • Bazel ビルドの場合、WORKSPACE から protobuf_deps が実行されると、Abseil は自動的にダウンロードされ、固定された LTS リリースでビルドされます。これは透過的であるはずですが、古いバージョンの Abseil に依存している場合は、依存関係をアップグレードする必要があります。

    • CMake ビルドの場合、まずトップレベルの CMake 設定によって取り込まれた既存の Abseil インストールを検索します(手順を参照)。それ以外の場合、protobuf_ABSL_PROVIDERmodule(デフォルト)に設定されている場合は、Git サブモジュールから Abseil をビルドしてリンクしようとします。protobuf_ABSL_PROVIDERpackage に設定されている場合は、事前にインストールされた Abseil のシステムバージョンを検索します。

GetCurrentTime メソッドの変更

Windows では、GetCurrentTime() はシステムが提供するマクロの名前です。v22.x より前では、Protobuf は GetCurrentTime() のマクロ定義を誤って削除していました。そのため、Windows 開発者は <protobuf/util/time_util.h> をインクルードした後、このマクロを使用できませんでした。v22.x 以降、Protobuf はマクロ定義を保持します。これにより、以前の動作に依存している顧客コード(たとえば、google::protobuf::util::TimeUtil::GetCurrentTime() 式を使用している場合など)が壊れる可能性があります。

アプリを新しい動作に移行するには、コードを次のいずれかに変更してください。

  • GetCurrent マクロが定義されている場合、GetCurrentTime マクロを明示的に未定義にする
  • (google::protobuf::util::TimeUtil::GetCurrentTime)() または同様の式を使用してマクロ展開を防止する

例: マクロの未定義化

Windows からマクロを使用しない場合は、このアプローチを使用してください。

#include <google/protobuf/util/time_util.h>

void F() {
  auto time = google::protobuf::util::TimeUtil::GetCurrentTime();
}

#include <google/protobuf/util/time_util.h>
#ifdef GetCurrentTime
#undef GetCurrentTime
#endif

void F() {
  auto time = google::protobuf::util::TimeUtil::GetCurrentTime();
}

例2:マクロ展開の防止

#include <google/protobuf/util/time_util.h>

void F() {
  auto time = google::protobuf::util::TimeUtil::GetCurrentTime();
}

#include <google/protobuf/util/time_util.h>

void F() {
  auto time = (google::protobuf::util::TimeUtil::GetCurrentTime)();
}

C++20 サポート

変更のソース: PR #10796

C++20 をサポートするため、C++ で生成される Protobuf コードで新しい キーワードを予約しました。他の予約済みキーワードと同様に、フィールド、enum、またはメッセージにこれらを使用した場合、有効な C++ にするためにアンダースコアの接尾辞を追加します。たとえば、concept フィールドは concept_() ゲッターを生成します。これらのキーワードを使用する既存のプロトがあるシナリオでは、それらを参照する C++ コードを更新して、適切なアンダースコアを追加する必要があります。

Final クラス

変更のソース: PR #11604

Protobuf ライブラリで行われている仮定を強化するための大規模な取り組みの一環として、継承されることを意図していなかった一部のクラスを final とマークしました。これらのクラスから継承する既知のユースケースはなく、そうすると問題が発生する可能性があります。コードがこれらのクラスから継承している場合、回避策はありませんが、使用している継承に正当な理由があると思われる場合は、課題をオープンできます。

コンテナの静的アサーション

変更のソース: PR #11550

Protobuf ライブラリで行われている仮定を強化するための大規模な取り組みの一環として、MapRepeatedField、および RepeatedPtrField コンテナに静的アサーションを追加しました。これにより、ドキュメントに記載されているように、これらのコンテナが期待される型でのみ使用されていることが保証されます。これらの静的アサーションに遭遇した場合、コードを Abseil または STL コンテナを使用するように移行する必要があります。std::vector は RepeatedField コンテナの優れたドロップイン代替品であり、std::unordered_map または absl::flat_hash_mapMap の代替品です(前者は同様のポインタ安定性を提供し、後者はより効率的です)。

クリアされた要素の非推奨化

変更のソース: PR #11588, PR #11639

「クリアされたフィールド」に関する RepeatedPtrField API は非推奨となり、後の互換性のないリリースで完全に削除されます。これは元々、クリアされた要素を再利用するための最適化として追加されましたが、うまくいきませんでした。この API を使用している場合は、より良いメモリ再利用のためにアリーナへの移行を検討する必要があります。

UnsafeArena の非推奨化

変更のソース: PR #10325

アリーナセーフではない API を削除する大規模な取り組みの一環として、RepeatedField::UnsafeArenaSwap を非表示にしました。これはこれまでに削除した唯一の API ですが、今後のリリースでは引き続き削除し、アリーナ間で効率的な借用パターンを処理するためのヘルパーを提供します。単一のアリーナ内(またはスタック/ヒープ)では、SwapUnsafeArenaSwap と同じくらい効率的です。異なるアリーナ間で誤って呼び出した場合に無効なメモリ操作を引き起こさないという利点があります。

マップペアのアップグレード

変更のソース: PR #11625

v22.0 では、Map API を Abseil と STL との整合性を高めるために整理し始めました。特に、MapPair クラスを std::pair のエイリアスに置き換えました。ほとんどのユーザーには透過的であるはずですが、クラスを直接使用していた場合はコードを更新する必要があるかもしれません。

新しい JSON パーサー

変更のソース: PR #10729

このリリースで C++ JSON パーサーを書き直しました。ほとんどの変更は隠されていますが、必然的に文書化されていない動作が変わっている可能性があります。それに応じてテストしてください。有効な RFC-8219 JSON ではないドキュメント(引用符がない、非標準のブール値を使用しているなど)の解析は非推奨となり、今後のリリースで削除されます。フィールドのシリアル化順序は、以前は非決定論的だったのに対し、フィールド番号の順序と一致することが保証されるようになりました。

この移行の一環として、util/internal の下のすべてのファイルが削除されました。これらは古いパーサーで使用されており、外部で使用されることは意図されていませんでした。

Arena::Init

変更のソース: PR #10623

ArenaInit メソッドは何も行わないコードであり、削除されました。このメソッドを呼び出していた場合は、おそらく ArenaOptions のセットで Arena コンストラクタを直接呼び出すことを意図していたはずです。呼び出しを削除するか、そのコンストラクタに移行してください。

ErrorCollector 移行

変更のソース: PR #11555

Abseil 移行の一環として、const std::string& から absl::string_view に移行しています。当社の 3 つのエラーコレクタクラスの場合、既存のコードを壊さずにこれを行うことはできません。v22.0 では、両方のバリアントをリリースし、メソッド名を AddErrorAddWarning から RecordErrorRecordWarning に変更することにしました。古いシグネチャは非推奨とマークされ、効率は少し低下します(文字列コピーのため)が、それ以外は引き続き機能します。Add* メソッドは後の互換性のないリリースで削除されるため、これらを新しいバージョンに移行する必要があります。