等啊等,盼儿盼,终于在 2019 年的 WWDC 大会之前,Swift 5 正式发布了,而更让大家想要奔走相告的是这一版本的 ABI 稳定了!
曾于 2017 年正式担任 Swift 语言开发项目组主管 Ted Kremenek 于近日在 Swift 官方博客上正式宣布,Swift 5 发布了!而这一次他也成功完成了彼时走马上任时立下的 flag,为 Swift 带来 ABI 的稳定。如今 Swift 可以更好地为当前和未来版本的苹果操作系统 macOS、iOS、tvOS 和 watchOS 服务。
与此同时,Swift 5 还引入了构建块的新功能,包括重新实现 String、在运行时对执行内存的独占访问和新数据类型,以及对动态可调用类型的支持。接下来,我们将一一探讨 Swift 5 中的变化。
ABI 的稳定意味着什么?
当前有关最新版本的 Swift 5,最为热议的话题之一毋庸置疑就是“ABI 稳定性”。在此,要论 ABI 的稳定对 Swift 意义为何如此重大?
其实,从开发者角度而言,早在 4 年前 Swift 2.0 发布之际,大家就希望 Swift 中的 ABI 能够稳定,因为只有这样 Swift 才能算是一门成熟的编程语言,否则用程序员的话来调侃,「自从学了 Swift 之后,每年都要学一门新语言」。
从技术角度来看,ABI 的稳定指的是二进制接口稳定,这意味着 Swift 应用程序不用再包含用于 Swift 标准库和 Swift SDK 的动态链接库,这些基础库将会被植入系统中。简而言之,以后如同 Objective-C runtime 一样,Swift runtime 和标准库会随着 iOS、macOS、tvOS、watchOS 的发布一起被提供。这样带来最为直接的影响就是可以为 App 瘦身。
不过当前仍有局限性的是,ABI 稳定虽然可以让 runtime 支持多个 Swift 版本,但是前提是苹果应用的开发者和框架、库的作者必须使用相同版本的编译器。如果想要删除此限制,根据 Swift 官方博客描述,库作者需要一个当前正在实现的功能,称之为 Module Stability 。通过这一点也可以预料到,在接下来的 Swift 5.1 版本中,Module Stability 应会是一个重要的目标。
那么 ABI 的稳定是否完全是一件好事?其实不然,正如知名 iOS 开发者王巍(江湖人称“喵神”)日前在自己的博客上(https://onevcat.com/2019/02/swift-abi/)所言:
在 ABI 稳定之前,Swift runtime 是作为开发工具的一部分,被作为库打包到 App 中的。这样一来,在开发时,我们可以随意使用新版本 Swift 的类型或特性,因为它们的版本是开发者自己决定的。不过,当 ABI 稳定后,Swift runtime 变为了用户系统的一部分,它从开发工具,变为了运行的环境,不再由我们开发者唯一决定。
那么除了实现了 ABI 的稳定性之外,,在 Swift 5 上还有哪些功能特性更新?
Swift 语言更新
新特性:
现在可以使用增强分隔符来表示字符串文字。在引号的前面加上一个或多个“#”,并以 # 号结尾,此时它会将反斜杠以及双引号视为字符。使用增强分隔符可以避免将包含多个双引号或反斜杠字符的