7

私は主にC++の人です。C++ には公式の ABI がないため、複数のコンパイラをサポートするコンポーネントの設計には常に COM のようなアプローチを使用します。

最近、Objective-C が COM のようなアプローチの代わりになるかどうかという疑問に遭遇しました。明らかに、Objective-C を代替するためには安定した ABI が必要です。そのため、Objective-C の安定した ABI が存在するかどうか (すべての主要な OS [OSX、GNU/Linux、Windows]) と、どのように簡単かを知りたいです。異なるコンパイラによって作成されたコンポーネント間の「接着剤」として Objective-C(++) を使用することになります。

編集: Nikolai Ruheが指摘したように、COM の簡単な説明が役立つ場合があります 。COM は基本的に、さまざまなコンパイラ (およびさまざまな言語) のバイナリを混在させることができる "バイナリ標準" です。COM の手段は、メソッド (C++ の仮想関数にマップされる) を定義するインターフェイスです。コンポーネントは少なくとも 1 つのインターフェイスを実装し、DLL として配布されます。それらはシステムのどこにでも配置でき (位置はレジストリで指定されます)、それらが実装するインターフェイスの ID を介して任意の COM クライアントによってロードできます。

4

1 に答える 1

5

私は GNU やその他のポートの経験がないので、Apple の実装についてしか話せません。

Objective-C は、大部分 (関数呼び出しや構造体のメモリ レイアウトなど) を C の ABI に依存しています。

それ自身の ABI は、 「モダン ランタイム」で導入された壊れにくいインスタンス変数、プロパティの導入、より高速な例外処理、ガベージ コレクション、ARC のサポートなど、Apple の実装でいくつかの変更を受けました。__weak

変更の一部は下位互換性があり、一部は互換性がありません。しかし、システム全体とフレームワークは Apple によって提供され、変更は通常、互換性のない他の変更 (Intel への切り替えと LP64) と共に導入されたため、ユーザーへの影響はありませんでした。

編集:覚えておくべきことの 1 つは、Objective-C が固定の ABI だけでなく、互換性のあるランタイムにも依存していることです。それはあなたの目的のために気にするもう一つの頭痛の種です.

于 2012-07-27T18:38:45.427 に答える