-1

さて、質問のタイトルは一種のフックでした。C++ 標準 ABI がないことは既に理解しています。とはいえ、熱心な賛成票を集めている皆さんをだましたわけではありません。C++ ABI に何らかの制限があるかどうか疑問に思っています。たとえば、少なくともクラスの名前がABI 名のどこかでマングルされることはよくあることのようです。

より明確な質問

すべての文字列に対して衝突のないハッシュ関数があるとしましょう。次に、GCC がその名前マングリングにもう 1 つのステップを追加したとしましょう。現在のマングルされた名前のハッシュをアンダースコアに追加します。これは太陽の下でほとんどすべてを破壊しますが、GCC は以前と同じように C++ 標準に準拠しているのでしょうか?

編集:

わかりました、どうやら「明示的な質問」ビットは、サブセクション名の選択が不十分だったようです。私は、人々が従う一般的な ABI 標準についてもっと知りたいと思っていました。これは、MSVC でコンパイルしたバイナリと正常にリンクする Mingw32 でコンパイルしたバイナリの存在によって通知されました。

4

3 に答える 3

0

はい、もちろん、標準に準拠したままです。ただし、標準に準拠していることは素晴らしいことですが、それがすべてではないことは確かです。

このような変更は、C++ で記述され、前述のバージョンの GCC を使用してコンパイルされたすべてのライブラリまたはアプリケーションの後方互換性を文字どおり破壊します。下位互換性は GCC 開発者にとって非常に重要であり、メーリング リスト (見てください) でかなりの時間を費やして、そのような破損に直面した場合の非常に小さな ABI 変更であっても相対的な利点について議論しています。多くの場合、下位互換性を維持できる回避策を提供するためにかなりの時間を費やします。

このポリシーを変更すると、ほとんどのディストリビューションがアップグレードを拒否することがわかりました。それらの多くがclangに移動する可能性もあります...

-f少なくとも、新しい「機能」を無効にする別のオプションが追加されることは間違いありません。

于 2013-06-15T01:23:23.350 に答える