Swift 6.2 有意义地推进了语言的发展

图0:Swift 6.2 有意义地推进了语言的发展

苹果公司发布了 Swift 6.2,在阅读了其中的变化后,我感觉这是一次有意义的进步,而不是又一次增量更新。该版本解决了影响我们如何进行 Swift 开发的几个长期存在的痛点,尤其是并发和性能方面的痛点。本文的其余部分总结了新内容,同时添加了一些彩色评论。如果您只想快速了解要点,可以阅读 公告

最实用的改进来自更好的并发处理。编写过 Swift 异步代码的人都知道,main actor 隔离错误和不可预测的异步方法行为会让人沮丧。Swift 6.2 引入了一个简单的解决方案,即代码默认在主线程上运行,而不需要 @MainActor 注释。这消除了许多编译器错误,而这些错误以前都是不得不采取的笨拙的变通方法。

现在,异步函数的行为更可预测。以前,调用异步方法总是会切换到全局线程池,从而在处理 UI 代码或共享状态时产生数据竞赛问题。新行为会将异步函数保持在调用者的执行上下文中,除非你明确希望并发执行。@concurrent 属性提供了对代码何时应并行运行的明确控制,使您的意图在源代码中一目了然。

元素周期表

内联数组(InlineArray)代表了性能上的重大进步。这些固定大小的数组可直接在堆栈中存储数据,或内联到其他类型中,完全避免了堆分配。语法感觉很自然,“[40 of Sprite]”这样的表达式取代了更复杂的表达式。这一特性使以前需要进行不安全操作或切换到低级语言的性能关键型代码成为可能。

Span 类型解决了另一个长期存在的限制,它提供了编译时保证的对连续内存的安全访问,运行时开销为零。通过类型系统,内存安全问题(如 “使用后无错误”)将变得不可能,而不再需要细致的手动管理。这将系统编程能力引入 Swift 的安全模型。

这些改进超越了语言本身。除了这些性能特性,嵌入式 Swift 现在还支持完整的字符串 API。苹果公司在 iOS 系统组件中使用了嵌入式 Swift,我认为这证明了他们致力于让 Swift 在软件栈的不同层级中都具有可行性。结合 Swift 和 C++ 的项目可以通过头注解利用 Swift 的安全抽象。

开发人员体验(以及选择自己工具的自由)受到了极大关注。VS Code 的官方扩展包括可保持快速编辑器功能的后台索引、可与 Swift 代码无缝协作的集成 LLDB 调试,以及可在编辑过程中更新文档的实时 DocC 预览。这些工作流程的改进解决了日常工作中效率低下的小问题,而这些小问题会导致工作效率下降。

通过预置的 Swift 语法依赖关系,SwiftPM 的性能显著提高了宏繁重项目的性能。以前在 CI 环境中需要大量时间才能完成的清洁构建工作,现在可以更快地完成。新的诊断组控制允许对编译器警告进行微调管理,让您可以将特定的警告类别提升为错误,同时保持其他警告类别的信息性。

基础版采用了现代的 NotificationCenter API,为以运行时崩溃著称的系统带来了类型安全性。与基于字符串的通知名称和无类型字典相比,你可以定义具有适当属性的具体通知类型。系统会自动处理主要角色隔离,防止出现传统通知模式常见的并发错误。

Swift 测试与用于验证终止条件的退出测试和在测试结果中包含丰富上下文的附件一起发展。原始标识符显示名称减少了模板,同时提高了测试输出的可读性。这些新增功能提高了测试框架的能力,同时不会增加复杂性。

WebAssembly 支持带来了新的部署可能性。Swift 现在可以将 Wasm 作为客户端和服务器应用程序的目标,超越了苹果的平台生态系统。这使 Swift 成为网络开发、无服务器计算和跨平台应用的可行选择。

Swift 6.2 的显著特点在于这些改进如何共同消除影响 Swift 开发模式的障碍。内存密集型应用程序可以保持在 Swift 的安全保证范围内。对于以前避免使用异步编程的开发人员来说,复杂的并发架构变得更容易接近。曾经需要混合语言的性能关键型代码可以完全保留在 Swift 中。

该版本创造了新的架构可能性。游戏引擎、实时音频处理、计算机视觉流水线和嵌入式系统控制器都可以成为合理的 Swift 项目。Swift 语言在保留其最初成功的安全性和表现力的同时,也超越了其移动语言的起源。

对于使用旧 Swift 版本的团队来说,新版本提供了可靠的升级途径。性能的提升带来了实实在在的好处,而简化的并发性和增强的工具所带来的生产力提升则加强了迁移的理由。Swift 6.2 消除了一些限制,这些限制影响了我们对 Swift 开发工作的理解,从而开辟了以前不实用的方法。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号