Swift 5.3 发布

2020年09月24日

Swift 5.3 稳定版已于上周正式发布,此版本继续专注于语言改进、提升开发者体验以及扩展 Swift 生态系统,以让 Swift 适用于更多场景。Amy Tsai 手绘的素描笔记介绍了 Swift 5.3 主要新特性:

语言和标准库

新特性和改进

Swift 5.3 带来了许多语言方面的改进,从而改善了编写 Swift 代码的体验。这些更新通过减少样板代码和冗余代码,并在可能使用的库中定义更多功能来帮助开发者成为更有生产力的 Swift 程序员。

Swift Evolution 流程中的提案在 Swift 5.3 中得以实现:

  • SE-0263 - Add a String Initializer with Access to Uninitialized Storage

  • SE-0266 - Synthesized Comparable conformance for enum types

  • SE-0267 - where clauses on contextually generic declarations

  • SE-0268 - Refine didSet Semantics

  • SE-0269 - Increase availability of implicit self in @escaping closures when reference cycles are unlikely to occur

  • SE-0276 - Multi-Pattern Catch Clauses

  • SE-0277 - Float16

  • SE-0279 - Multiple Trailing Closures

  • SE-0280 - Enum cases as protocol witnesses

  • SE-0281 - @main: Type-Based Program Entry Points

  • SE-0282 - Clarify the Swift memory consistency model ⚛︎

  • SE-0285 - Ease the transition to concise magic file strings

  • SE-0286 - Forward-scan matching for trailing closures

Swift 5.3 还修复了几个编译器限制的问题:

  • SR-75 - Unapplied references to protocol requirements are now supported

  • SR-7083 - lazy properties can define didSet and willSet accessors

  • SR-8814 - Generic classes can use default implementations of protocol requirements when conforming to protocols with associated types

改进 runtime 性能

Swift 5.3 显著改善了二进制代码大小和 runtime 内存使用情况,这些改进也在多个项目中得到了验证:

  • 从 Swift 4 开始,Apple 的 Swift 团队一直通过 iOS 附带的 UIKit 应用(用 Objective-C 编写)来测量 Swift 重写的二进制代码大小。Swift 4 的代码量约为 Objective-C 版本的 2.3 倍,到了 Swift 5.3 下降到 1.5 倍以下

  • 基于 SwiftUI 的开源应用 MovieSwiftUI,与 Swift 5.1 相比,使用 Swift 5.3 重写的应用逻辑代码量减少了 40% 以上

  • 在创建包含 400 个模型对象的数组的测试应用程序中,由于 runtime 开销而导致的堆内存比 Swift 5.1中使用的堆内存少 2/3

开发体验

改进编辑代码时的缩进效果

此版本全面修订了 SourceKit 中的自动缩进实现,在此过程中修复了约 50 个反馈报告。特别是以下情况的自动缩进得到了很大改进:

  • 涉及闭包的链式方法调用

  • 调用跨越多行的参数和集合元素

  • 多行的ifguardwhile条件

代码补全

  • 与 Swift 5.2 相比,现在在函数体内重复执行代码补全调用的速度提升了 15 倍。这是通过在同一文件中重用先前完成的一些计算来实现的。这些优化将在 Xcode 和 SourceKit-LSP 中均可用

  • Swift 代码补全现在支持用户定义的 nominal 类型的可调用值 (SE-0253)。代码补全显示了在基本表达式后加上圆括号后的调用签名

优化构建时间

Swift 5.3 进一步优化了代码补全性能和质量:

  • 通过避免跨源文件的重复编译工作,并更准确地标识与以前的构建相比未更改的代码,从而缩短增量构建时间

  • 通过修复编译器的行为对声明顺序或嵌套敏感的多种情况,提高了正确性

  • 使用从另一个库导入的具有大量属性和函数的类型的代码,可以更快地进行编译

此外还有关于调试、Swift 包管理以及编译器诊断方面的更新,详情查看 发布公告

展开阅读全文
0 收藏
分享
加载中
精彩评论
感觉swfit的语法还是另类了一点。。
2020-09-24 09:01
1
举报
最新评论 (5)
是不是没有mac就没法玩
2020-09-24 13:55
0
回复
举报
支持linux 和windows了
2020-09-24 15:10
0
回复
举报
这是要重新入门一遍吗
2020-09-24 12:02
0
回复
举报
感觉swfit的语法还是另类了一点。。
2020-09-24 09:01
1
回复
举报
毕竟是个天才发明的
2020-09-27 10:39
0
回复
举报
更多评论
5 评论
0 收藏
分享
返回顶部
顶部