什么是ABI稳定性,为什么重要?

Swift是一种移动的编程语言。 它发展很快。 增长的下一步是ABI稳定性,将在Swift 5中引入

应用程序二进制接口(ABI)定义软件程序如何与已编译的二进制文件进行通信。

ABI

  1. 数据布局,它定义数据类型实例在内存中的布局方式。
  2. 调用约定,该约定控制如何传递函数的参数以及如何检索返回值
  3. 运行时和标准库
  4. 类型元数据,包含有关类型的信息
  5. 所有权决定
  6. Mangling,使用哪个编译器唯一地标识源中标识符的名称。

ABI稳定性意味着定义一组约定,规则并获得标准化表示,以便将来的编译器版本生成兼容的二进制文件。

当前,如果将用Objective-C编写的应用程序迁移到Swift,则该应用程序的大小至少增加5-10 MB。 这是因为每个使用Swift构建的应用都在其中嵌入了Swift框架。 当Swift 5在2019年初实现ABI稳定性时,Swift标准库和运行时将被嵌入到iOS中,并且所有应用程序都将能够使用它。 因此,您的应用大小会减少。

实现ABI稳定性的第一步是源兼容性。 源代码兼容性意味着较新的编译器可以编译用较早版本的Swift编写的代码。 使用Swift 4.2,可以实现Source兼容性。 您的应用程序现在可以包含符合不同版本的Swift(例如Swift 3或Swift 4)的库。

具有ABI稳定性,编译器生成的二进制二进制文件的未来版本需要在不破坏现有应用程序的情况下工作。 例如:如果Swift团队决定将来支持高级并发机制,则其设计必须符合ABI。 他们可以在内部进行许多更改,但必须向后兼容。

目前,SDK开发人员无法使用Swift分发封闭源二进制文件。 到目前为止,他们都依赖Objective-C。 使用ABI,接下来是模块格式的稳定性。 完成后,SDK开发人员将能够将Swift源代码作为封闭的二进制文件与模块文件(标头文件)一起提供。

Swift ABI的稳定性将是这门年轻语言的成熟点。

我的Twitter Deekshith Bellare