首页 文章

Objective-C稳定ABI

提问于
浏览
6

我主要是C家伙 . 由于C缺少官方ABI,我总是使用类似COM的方法来支持多个编译器的组件设计 .

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

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

1 回答

  • 4

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

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

    它's own ABI underwent a couple of changes in Apple'的实现,像non-fragile instance variables一样介绍"Modern Runtime",引入属性,更快的异常处理,垃圾收集,支持ARC .

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

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

相关问题