ABI是什么? Swift ABI稳定有什么好处?

ABI是什么?

在软件开发中, 应用程序机器二元码界面(Application Binary Interface 简称ABI)指两个程序模块间的接口; 一般其中一个车还给你徐模块会是库或者操做系统提供的服务, 而另外一边的模块则是用户所运行的程序.php

一个ABI定义了机器代码如何访问数据结构与运算程序, 此处所定义的界面至关地基而且相依于硬件. 而相似概念的API则在源代码定义这些, 较为高端, 并不直接依赖于硬件, 一般会是人类可阅读的代码. 一个ABI常见的样貌便是调用约定: 数据怎么称为计算程序的输入或者从中获得输出;x86的调用约定便是一个ABI的例子.swift

决定要不要采用既定的ABI, 一般由编译器, 操做系统或库的开发者来决定; 然而, 若是编写一个混合多个语言的应用程序, 就必须直接处理ABI, 采用外部函数调用来达成此目的.数据结构

调用约定: https://zh.wikipedia.org/wiki/%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9Aapp

ABI: https://zh.wikipedia.org/wiki/%E5%BA%94%E7%94%A8%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%8E%A5%E5%8F%A3框架

Swift ABI稳定对咱们意味着什么?

ABI稳定就是binary接口稳定, 也就是在运行的时候只要是经过Swift5或者以上的编译器编译出来的binary, 就能够泡在任意的swift5及以上的runtime上. 这样, 咱们就不须要像之前那样在app里面放一个swift runtime了, Apple会把相应的ABI整合到iOS或者macOS中.函数

好处: 工具

  1. App尺寸会变小: Apple会根据iOS操做系统建立不一样的下载包. 对于iOS12.2的系统, 由于它预装了swift5 runtime, 因此再也不须要Swift的库, 它们被从app bundle中删除掉. 对于iOS12.2如下的系统, 照旧.
  2. 由于系统集成了Swift, 因此你们都用同一个Swift了, app启动时候也就不须要额外加载Swift, 因此在新的系统中会更加节省内存. 另外, 对于Apple的工程师来讲, 他们能够在系统的框架中使用swift, 这样不少东西没必要经过oc wrap一遍, 这会让代码运行效率提升不少.

代价:开发工具

swift版本被放到了iOS系统中, 因此想要升级就没那么容易了, 除非升级操做系统. 在ABI稳定以前, swift runtime做为开发工具的一部分, 背做为库打包到了app中. 这样, 在开发时候, 咱们能够随意使用新版本的swift特性, 由于他们的版本是开发者本身决定的. 不过当ABI稳定后, swift runtime变成用户系统的一部分, 它从开发工具变成了运行环境, 再也不由开发者惟一决定.操作系统

这和咱们一直以来适配新系统的 API 时候的状况差很少,在 Swift 5 之后,咱们须要等到 deploy target 升级到对应的版本,才能开始使用对应的 Swift 特性。这意味着,咱们可能会须要写一些这样的兼容代码:code

// 假如 Swift 6.0 是 iOS 13.0 的 Swift 版本
if #available(iOS 13.0, *) {
    // Swift 6.0 标准库中存在 A
    let a = A()} else {
    // 不存在 A 时的处理
}

有什么方法可以让咱们无视系统版本, 去使用swift新特性吗?

方法仍是有的, 可是相对比较麻烦, 很大程度上依赖于苹果是否愿意提供支持. 就像可是iOS5.0引入ARC时候, Apple为了让iOS4.3和以前的系统也能使用ARC的代码, 在deployment target选到iOS4.3或以前时候, 回采用static link的方法打包一个叫作libarclite的库, 其中包含了ARC所需的一些runtime方法. 对于ABI稳定后的swift, 也许能够采用相似的作法. 全看Apple是否愿意提供支持.

总结

ABI稳定最大的受益者应该是Apple, 这让Apple在本身的生态系统中, 特别是系统框架中, 可使用Swift来进行实现. Swift ABI稳定为Apple开发平台的一场戈丁奠基了基础. 在将来的几年里, 若是你还想要关注Apple平台, 可能下面几件事情特别重要:

  • Apple 何时发布第一个 Swift 写的系统框架
  • Apple 何时开始提供第一个 Swift only 的 API
  • Apple 何时开始“锁定” Objective-C 的 SDK,再也不为它增长新的 API
  • Apple 何时开始用 Swift 特性更新现有的 Objective-C SDK

Swift ABI稳定对咱们到底意味着什么: http://www.cocoachina.com/cms/wap.php?action=article&id=26388

相关文章
相关标签/搜索