Swift 1.0 发布:一门语言的演进历程

阅读数:1337 2014 年 9 月 10 日

话题:AppleiOS语言 & 开发架构

Apple 宣布,适用于 iOS 的 Swift 1.0 已经达到 GM 状态,开发者现在就可以开始提交使用 Swift 编写的应用了。Apple 提到,该语言将继续“引入新特性、改进性能并精练语法”,就像该语言自 6 月份的 WWDC 2014 发布以来所经历的变化那样。

在适用于 iOS 的版本达到 GM 状态之前,Swift 已经经历了数个 Beta 版本,除了修复一些不可避免的 Bug,还逐步精练了该语言的语法和语义,同时提高了性能。

Swift 的语法和语义

每次发布 Beta 版本时,Apple 都会更新官方的《Swift Language Reference》,以便与语言的新特性保持同步。另一方面,Xcode 的发布说明中详细列出了 Swift 在相邻 Beta 版本之间发生的变化,不过其中夹杂着 Xcode 的所有修改。

这时候Karol S. Mazur创建的 GitHub 仓库SwiftInFlux就派上用场了,它支持以结构化方式一览 Swift 的所有修改。而且这个仓库特别有意义的地方在于,对于 Swift 的某些修改,它们意味着什么,为什么要加进来,我们可以看到 Swift 的创建者 Chris Lattner 的意见。

除了以简洁的方式列出 Xcode 的每个 Beta 版本对 Swift 所做的修改,该仓库还收集了一些修改请求,它们或者是在 Apple 开发者论坛讨论过的,或者是通过 Radar 报告给 Apple 的。在 1.0 之后版本的进一步开发中,Swift 可能会引入一些重要特性,如抽象方法、访问控制、C++ 支持和返回 nil 的初始化器等,不过 Apple 方面对此没有任何承诺。

Swift 的性能

在 Swift 最初对外宣布时,Apple 鼓吹速度是该语言最值得注意的特性之一,相对于 Objective-C 有 40% 的性能增加。不过几个开发者进行的一些最初测试显示,结果并非如此,除非使用 -Ofast 编译器优化选项(不过该选项会去掉所有的运行时安全检查),否则有些情况下的性能还不如 Python。这一发现引发了在线讨论,有些开发者暗示 Swift 还处于发展之中,并评论说,Beta 版本存在性能问题并不是稀罕事。

确实,所有的性能问题早在上个月初发布的 Xcode 6 beta 5 中都已经修复了。根据开发者Jesse Squires 的报告,在 Xcode 6 beta 5 中,仍然使用测试最初发布版本时所用的测试算法,Swift 的性能首次在所有算法中都超过了 Objective-C。开启新的 -Ounchecked 优化选项,甚至会得到更好的结果,该选项替代了 -Ofast,这样其真正行为看上去就更为明显了。

Mike Ash 撰文详尽地分析了 Swift 胜过 Objective-C 的原因,他考虑到的因素有:得益于静态分派的更快的方法分派,由语言支持的更多内联函数调用的机会,因为不必在所有方法调用上处理 _cmd 隐式参数而带来的更高效的寄存器使用效率,指针别名分析可以优化多个指针指向同一内存区域的情况。

适用于 OS X 的 Swift

适用于 OS X 的 Swift 尚未达到 GM 状态,不过这是因为它要依赖 Yosemite SDK。Apple 介绍说,当 Yosemite 达到 GM 状态时,适用于 Mac 的 Swift 也将达到 GM 状态。在此期间,开发者可以下载Xcode 6.1的 Beta 版本,使用 Swift 构建 Mac 应用。Apple 在宣布 Swift 时提到,到 Yosemite 达到 GM 状态时,Xcode 6.1 还将对 Swift 做些改进。可以预见会存在不兼容问题,不过不管语言定义方面有何修改,“因为今天的应用中嵌入了一个 Swift GM 运行时版本,所以未来可以继续很好地运行”。

查看英文原文:Swift Turns 1.0: The Evolution of a Language