abi是什么?swiftabi稳定有什么好处?(代码片段)

dev-walden dev-walden     2022-12-03     620

关键词:

ABI是什么?

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

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

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

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

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 特性。这意味着,我们可能会需要写一些这样的兼容代码:

// 假如 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

什么是抢占/什么是可抢占内核?到底有什么好处呢?

】什么是抢占/什么是可抢占内核?到底有什么好处呢?【英文标题】:Whatispreemption/Whatisapreemtiblekernel?Whatisitgoodfor?【发布时间】:2010-10-2310:56:49【问题描述】:用你自己的话解释一下,什么是抢占,它对(linux)内核意味着什么... 查看详情

vip邮箱注册会有什么好处?

...箱,有的人使用的是免费邮箱,那么vip邮箱注册究竟会有什么好处?可以说,vip邮箱的功能是免费邮箱的加强和延伸,具体的vip邮箱注册会有什么好处,以tom的vip邮箱为例,大概是下面这几个方面了。1.珍稀靓号的申请,免费邮... 查看详情

什么是枚举?有什么作用?有什么好处?

楼上的同学……光说不给例子没用,光给例子不说也没用啊。其实枚举就是在一个类里定义几个静态变量,每个变量都是这个类的实例。比如说,类Human有两个静态变量:Man,Woman,每一个变量都是Human类的实例。用的时候就直接... 查看详情

什么是 Android ADB shell“dumpsys”工具,它有什么好处?

】什么是AndroidADBshell“dumpsys”工具,它有什么好处?【英文标题】:What\'stheAndroidADBshell"dumpsys"toolandwhatareitsbenefits?【发布时间】:2012-06-2710:27:49【问题描述】:我正在寻找ADBshelldumpsys命令的完整列表以及所有命令的完整... 查看详情

什么是 Scala 中的类型 lambda,它们有什么好处?

】什么是Scala中的类型lambda,它们有什么好处?【英文标题】:WhataretypelambdasinScalaandwhataretheirbenefits?【发布时间】:2012-02-0221:40:44【问题描述】:有时我偶然发现了的半神秘符号deff[T](..)=newT[(typel[A]=SomeType[A,..])#l]..在Scala博客文... 查看详情

什么是lambda函数?它有什么好处?

lambda函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。lambda函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一... 查看详情

什么是lambda?有什么好处(代码片段)

lambda函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数1、lambda函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下;2、匿名函数,一般用来... 查看详情

docker是什么?使用docker的好处有哪些?

本文由小千带大家了解Docker是什么,Docker和传统虚拟化对比的区别,Docker架构是怎样的,Docker的作用以及使用Docker的好处有哪些?Docker是什么?1.1什么是Dockerdocker是一个开源的软件部署解决方案;docker也是... 查看详情

香港服务器使用cdn加速对网站有什么好处?

在生活中,有不少站长在租用香港服务器部署网站的时候,苦于带宽比较小,虽然网速延迟足够低,但是小水管遇到流量攻击,要么被机房封禁IP,要么服务器受不了攻击直接崩溃了。因此,要想保证... 查看详情

java堆内存中为什么有两个survival区及为什么与年轻代比例是1:1:8?

...vival又分为fromSurvival和toSurvival。  首先第一个问题:为什么要有Survival区?因为如果没有Survival区,Eden每进行一次MinorGC,存活对象送到老年代,当老年代被填满就会触发MajorGC,消耗大量时间。当有Survival区后,存活对象可以先... 查看详情

梅林固件有啥好处?

...技术A问题一:网件路由器刷梅林固件和官方固件到底有什么不同国际一线品牌路由有华硕美国网件美国思科各有千秋,个人喜欢华硕比较稳定,这三款除了更新官方固件,你可以理解为系统,还可以刷第三方固件,第三方固件... 查看详情

02你是如何理解html语义化的,有什么好处

...TML标签添加有意义的class和id来补充未表达的语义。05,为什么需 查看详情

静态ip有什么好处?什么情况下要用到静态ip

静态IP和动态IP分别是什么?1、静态IP分配之后长期不变的IP(即使重启了光猫后重新拨号IP依旧不变),你在某个宽带运营商那里开了账户之后,你的IP也就固定了。这种静态IP一般都是企业使用的。2、动态IP动态IP意味着每次重... 查看详情

智能还款软件有哪些优点和好处?

社会的不断发展,智能代还系统也走进了千家万户,更多的人选择智能代还而放弃了手动还款,看中的不仅是它的方便和易于管理,也是看准了其安全可靠性。然而之所以有这么多的人使用智能代还系统,是因为它有很多传统手... 查看详情

智能还款软件有哪些优点和好处?

社会的不断发展,智能代还系统也走进了千家万户,更多的人选择智能代还而放弃了手动还款,看中的不仅是它的方便和易于管理,也是看准了其安全可靠性。然而之所以有这么多的人使用智能代还系统,是因为它有很多传统手... 查看详情

什么元组有好处? [复制]

】什么元组有好处?[复制]【英文标题】:whattuplesaregoodfor?[duplicate]【发布时间】:2011-11-0402:01:01【问题描述】:在C#.Net4.0中引入了tuples。如何以有意义的方式使用元组的最佳示例是什么?【问题讨论】:遗憾的是,元组的真正... 查看详情

做网站有什么好处,对企业有何价值?

...还有很多,下面众展网络为大家详细介绍做网站对企业有什么价值:一、增加曝光率中小企业常常都会考虑一个问题,我们的企业何时才能像那些大企业一样,被众人熟知,有很好的品牌效果呢。线下的网络推广方式一般都是找... 查看详情

金牌导购系统对商家有什么好处

...详情咨询152-7733-8051微信同号)一、“金牌导购系统”是什么金牌导购系统是基于一物一码技术推出的可塑性强的产品,通过一个二 查看详情