今天凌晨,我看到 Swift 开发小组的现任掌门 Ted Kremenek 贴出了名为「Swift 5: start your engines」的一条 Twitter,预示着 Swift 5 的开发工作即将展开了。
老实说,Swift 4 的变化不大,而且有一些「反复」的修改,比如:String 又变成 collection,private 和 fileprivate 的反复。好在做好了 Swift 3 -> Swift 4 的兼容工作,也算是比较重要的一件大事。
那么 Swift 5 有哪些变化?在看完新的 Swift Evolution 以后,我提炼出了这些内容:
ABI Stability
ABI 稳定,从 Swift 3 推到 Swift 4,又延后到 Swift 5,这次应该是真的了。为什么这么说呢?
因为这次目标很明确,先做到 Swift Standard Library 的 ABI 稳定。从开发者和用户的角度来说,iOS 12(macOS 10.13)将内置 Swift 的运行库,这意味着所有用 Swift 写的 App,将不用再自带一份多达几 MB 的 Swift 库了。整个 iOS/macOS 将可以省上不少空间。
往后 Swift Standard Library 也可以随操作系统进行升级,而 App 不用重新编译就可以获得不论是性能还是 Bug 的修复。
可以说 ABI 稳定做到了一大半。另外一半,Swift 开发小组没有承诺会在 Swift 5 完成,这一半就是:Module Stability。Module Stability 主要是面向 Framework 级别的分发。和 Library 不同,Framework 在处理 Public Interface 方面会复杂一些。具体的我也没有太深究。
总之,Swift 5 先做到 Swift Standard Library 的稳定,已经是极好的消息了!
Memory ownership model
Swift 5 将要引入由 Cyclone/Rust 启发的内存保护模型,这是 Swift 的目标「安全」的一部分。实际上 Swift 4 已经做了一部分。在看 WWDC 17 的视频的时候,我记得 Swift 4 已经做到了「Enforce Exclusive Access to Memory」,比如在遍历一个数组的时候就去修改内容,编译器会进行错误提示。
至于 Swift 5 要如何做「Memory ownership model」,去看 Rust 的现状应该就能略知一二了,更何况现在 Swift 开发小组里面本来就有很多 Rust 跳槽(挖)来的人。
可以预见,Swift 5 将在内存操作和使用方面,更安全,更易用。
String 的增强
String 这个语言的基础类,在 Swift 4 进一步标准以后,在 Swift 5 将迎来进一步增强。比如 Regular Expression 的支持。
在现在的 Swift App 里,我们还需要调用 Cocoa 的 NSRegularExpression 来进行正则表达式的支持,一门强大的语言却没有内置相关支持,这怎么都说不过去。
所以下个版本可以期待一下了,这个究竟能不能完成还不好说。
打好 Concurrency 的基础
同上,Swift 现在的并发依然需要借助 GCD 这个外部的库去做,虽然 GCD 已经足够好用了,但是语言层面没法拥有像其他语言 async/await 一样的支持,显然是个缺点。
Swift 5 将「打好 Concurrency 的基础」,这说明这个版本不会有内置并发的功能出现。
Proposal 规则之变更
从 Swift 5 开始,每个 Proposal 都需要一个的实现才有可能被合并,这使得提需求的门槛一下子提高了!
「你有啥对 Swift 5 的期望和意见?没问题,尽管提,我们这是开放社区。但是,如果你不同时给出一份代码,那么这个提议将永远是提议而已了。」
总结
Swift 4 将于下个月正式发布,这个版本将带来真正的无痛迁移——我已经亲自在自己的项目上做过试验,不用改一行代码就能顺利跑起来啦。
可以说 Swift 4 已经改变了之前 Swift 每个版本都要有一次大型 break 的固有印象,这门语言各方面也都越来越稳健。
至于 Swift 5 的研发到底会不会达到目标,让我们拭目以待吧!