c++ - Objective-C 稳定的 ABI

标签 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++ 的虚函数)的接口(interface)。组件实现至少一个接口(interface)并作为 DLL 分发。它们可以位于系统的任何位置(位置在注册表中指定)并且可以由任何 COM 客户端通过它们实现的接口(interface)的 ID 加载。

最佳答案

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

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

它自己的 ABI 在 Apple 的实现中经历了一些变化,比如 non-fragile instance variables介绍了 "Modern Runtime" ,引入属性,更快的异常处理,垃圾回收,__weak 对 ARC 的支持。

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

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

关于c++ - Objective-C 稳定的 ABI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693436/

相关文章:

objective-c - Objective-C 中的 self

c++ - Apple 的 Using C++ with Objective-C 文章不见了...谁能给我一篇新文章,或者帮我找到旧文章?

IOS 应用程序中的 C++ 类,Xcode 5

ios - 将 CGPoint 数组传回 swift

c++ - 通过指针数组实现树的优点?

ios - 从 ios 中的另一个弹出按钮执行弹出窗口

c++ - 对 std::unique 实现感到困惑?

ios - 如何减少 didRangeBeacons 方法的时间间隔

c++ - 逻辑 : B contained by set A 的模板和 C++ 运算符

c++ - 使用 QtUdpSocket 的简单通信 c/s 应用程序