最近发布在swift-evolution 邮件杂志上的《Swift ABI 稳定性宣言》旨在汇编公开宣称Swift ABI 稳定前所需解决的所有问题。
《Swift ABI 稳定性宣言》的作者——苹果公司工程师 Michael Ilseman 写道,ABI 稳定性的目标包含以下两个主要部分:
- 定义一个模块文件,这个模块文件包含了 Swift 编译器关于把公共框架的 API 与在运行时加载的可执行代码捆绑在一起的描述的标准化表示。
- 定义一系列影响低级别细节的约定,例如如何调用函数,如何在内存中表示数据和元数据等。
Ilseman 特别指出需要致力于以下六个方面:
- 数据布局,主要是定义如何在内存中布置 struct 和 class 实例。
- 类型元数据,要求有特定的内存布局或 API 查询。
- name mangling ,主要是定义编译器如何分别标识外部符号,例如类型和函数。
- 函数调用约定,主要是定义如何将参数传入 / 传出函数,以及该保留哪些寄存器等。
- Swift runtime ,主要是提供动态转换、引用计数、反射等的基本机制,属于 ABI 的一部分。
- 标准库,它的 API 是 ABI 的一部分,应用程序和库都会调用它。
ABI 稳定性是 Swift 4 计划的优先级最高的功能之一,对第三方框架开发人员至关重要。正如 InfoQ报道所指出,Swift 3 因为无法定义锁定ABI 之前需要定义的一些方面,所以没有实现ABI 的稳定性。在最近的 Accidental TechS 播客采访中,前苹果工程师兼 Swift 创始人 Chris Lattner 表示,ABI 稳定性对于应用程序开发人员来说并不重要,但“对苹果公司来说非常重要”,并且它是公司内部采用 Swift 的关键因素:
要真正地在苹果公司全面采用 Swift,Swift 团队必须实现一些特定目标。ABI 稳定性是阻止框架开发人员采用 Swift 的首要因素。这是一件非常重要的事情,也是 ABI 稳定性总是排在很高优先等级的原因之一。
实际上,目前仍然不完全清楚 Swift 4 ABI 是否能被宣称为具有稳定性。Lattner 说,这可能受两个因素的影响,它们是 ABI 稳定性包含的工作量以及它可能不是 Swift 社区最重要的事情。
如果他们什么时候决定专注于 Swift 4 中其他比 ABI 稳定性更重要的方面,我也不会感到惊讶。
Lattner 指出了一些 Swift 社区中排在更高优先级别的问题:比如使编译器更具可靠性,更准确的错误提示,加快编译速度,以及使 Swift 更适用于大型项目。
查看英文原文: The Road to Swift 4 ABI Stability
感谢王纯超对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论