繁体   English   中英

Objective-C稳定ABI

[英]Objective-C stable ABI

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM