什么是非脆弱的ABI?

Ale*_*ray 6 compiler-construction 64-bit xcode cocoa objective-c

似乎暗示每个人都知道"非脆弱的ABI"是什么 - 考虑到Xcode中所涉及的频率和事实性质.例如...

下标要求接口节点的大小在非脆弱的ABI中不是常数

要么

选择要使用的Objective-C ABI版本.可用版本为1(传统"脆弱"ABI),2(非脆弱ABI 1)和3(非脆弱ABI 2).

那说...... 什么是非脆弱的ABI?(为什么不把它称为不那么抽象/更清楚地解释?)

bbu*_*bum 15

非脆弱的ABI指的是将实例变量添加到类而不需要重新编译所有子类的能力.

即v1(确实没有真正的ObjC版本),如果Apple要将实例变量添加到NSView(在Cocoa上,32位),那么NSView的每个子类(或子类的子类)都必须被重新编译或他们会爆炸.v2和v3解决了这个问题.

这篇博客文章详细解释了这一点.

您要引用的文档位于llvm/clang手册页中.大多数时候,大多数开发人员都非常难得; 除非你正在编写一个直接驱动编译器的Makefile,否则没有太多理由去阅读那个页面(除非是spelunking - 当然这很有教育意义).

它是用Unix手册页的风格编写的,毫不奇怪,有点......愚蠢.对于几乎所有任务,最好坚持使用更高级别的文档.即Xcode构建设置文档通常不那么迟钝.