Objective-C稳定ABI

MFH*_*MFH 6 c++ objective-c objective-c++

我主要是一个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加载.

Nik*_*uhe 5

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

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

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

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

编辑:您应该记住的一件事是,Objective-C不仅依赖固定的ABI,而且依赖于兼容的运行时。为您的目的还要担心的另一件事。