gpt4 book ai didi

c++ - Objective-C 稳定的 ABI

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:26 24 4
gpt4 key购买 nike

我主要是一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com