2014-01-05 4 views
9

C++標準化委員会がSTLの変更を調査すると、ABIの改変を導入しないように大きな注意を払っています。CBIでABIが破損する原因は何ですか?

ABIの崩壊の原因となるものと、C++でのABI破棄の原因は何ですか?

+4

最初の段落に記載されている事実についての参考資料がありますか?それは私にとって少し奇妙なようです。なぜライブラリがABIに関係しているのかわかりません。 –

+0

@DavidHeffernan "[library] ABI"と "ABI"があります。第1のものは公開されたバイナリインタフェース(例えば、C++共有ライブラリ)であってもよい。第2の実装は、通常、コンパイラ/プラットフォーム/バージョン/アーキテクチャ/フラグの組み合わせの実装定義コード生成の詳細を参照します。最初のものは2番目のものに依存しますが、移植可能な安定したライブラリABIを持つことができます – sehe

+0

@seheどちらもSTL標準に関連していないようです –

答えて

6

共通のABIはありませんが、標準委員会は、は、一部のベンダーによって報告されているABIの破損に関する懸念を提起するベンダーの意見に耳を傾けています。

潜在的なABI破損の原因となる主な問題は、クラスまたはクラステンプレートのレイアウトを変更したり、通常はインライン関数の動作を変更するものです。わずかに異なる配合で、あるいは少し機能を動かすことによって問題が解決される時期。

C++ 11に関しては、std::list<...>::size()に関するABI関連の議論は一定の時間に行われ、std::basic_string<...>のCOW実装は禁止されています。リストの問題では、問題はそうではありませんでした。なぜなら、ほとんどの実装ではすでに一定の時間の長さが使用されていて、 std::basic_string<...>の場合、COW実装のABIは、異なる文字列オブジェクトのデータ競合を保証しないという欠点が受け入れられないため、壊れていました。

誰も例外ではないABIを壊すと思われるスタックトレースを義務付けているアイデアのように、ABIの破損はかなり致命的な議論です。 ABIの改ざんの変更を要求する変更が導入されることもありますが、そのような場合は何にも影響を及ぼさない変更よりもはるかに強力であると主張する必要があります。変更のメリットが、 。いくつかの争いのあるケースでは、後方互換性のために潜在的にわずかな非効率なバージョンを実装する機会があるかどうかを検討し、調査しました。

ABIの問題は、新しいコンパイラで古いライブラリを使用できない場合、大声で苦情を申し立てる企業があることです。場合によっては、ベンダーはスイッチをサポートするためにスイッチを提供しますが、たとえばstd::stringが変更されるほど多くのライブラリに焼き付けられます。

関連する問題