7

我主要是一个 C++ 人。由于 C++ 缺乏官方的 ABI,我总是对支持多个编译器的组件设计使用类似 COM 的方法。

最近我遇到了一个问题,Objective-C 是否会替代类似 COM 的方法。显然,要使 Objective-C 成为替代者,需要一个稳定的 ABI,因此我想知道是否存在用于 Objective-C 的稳定 ABI(在所有主要操作系统 [OSX、GNU/Linux、Windows] 上)以及有多容易它将使用 Objective-C(++) 作为不同编译器创建的组件之间的“粘合剂”。

编辑: 正如Nikolai Ruhe指出的那样,对 COM 的简短描述可能会有所帮助。COM 本质上是一个“二进制标准”,它允许混合不同编译器(以及多种语言)的二进制文件。COM 的载体是定义方法(映射到 C++ 的虚函数)的接口。组件实现至少一个接口并作为 DLL 分发。它们可以位于系统上的任何位置(位置在注册表中指定),并且可以由任何 COM 客户端通过它们实现的接口的 ID 加载。

4

1 回答 1

5

我只能代表 Apple 的实现,因为我没有使用 GNU 或其他端口的经验。

Objective-C 在很大程度上依赖于 C 的 ABI(如函数调用和结构的内存布局)。

它自己的 ABI 在 Apple 的实现中经历了一些变化,比如“现代运行时”引入的非脆弱实例变量、属性的引入、更快的异常处理、垃圾收集、对 ARC 的支持。__weak

有些更改是向后兼容的,有些则不是。但是由于整个系统和框架由 Apple 提供,并且这些更改通常是与其他不兼容的更改(切换到 Intel 和 LP64)一起引入的,这对用户没有影响。

编辑:您应该记住的一件事是,Objective-C 不仅依赖于固定的 ABI,而且还依赖于兼容的运行时。为了您的目的,这是另一个令人头疼的问题。

于 2012-07-27T18:38:45.427 回答