2023年Swift将带来哪些创新?

发表时间: 2022-11-29 12:16

【CSDN 编者按】John McCall 作为 Apple Swift 团队的一名工程师兼语言工作组成员在最新发布的一篇博客中介绍了 Swift 的 2023 年度项目。


作者 | John McCall 编译 | 刘春霖
出品 | CSDN(ID:CSDNnews)

在 Swift 项目中有很多令人振奋的工作正在进行中,但却很难对其进行跟踪,因为它发生在许多不同的存储库、拉动请求和论坛线程中。为了让社区更好地了解全局,核心团队调查了整个项目的工作组和开发人员,并收集了关于他们在未来一年的重点关注的内容的信息。


社区组织


长期以来,Swift 一直有一个集中的结构,由核心团队直接监督项目的许多不同领域。

核心团队最近开始重组,以便由专门的工作组承担更多责任:

  • 语言工作组 —— 发展语言和标准库

  • 网站工作组 —— 管理 swift.org 上的网页内容

  • 文档工作组 —— 组织文档工具和库的开发

  • C++互操作性工作组 —— 孵化语言提案以提高与 C++ 的互操作性

据介绍,这些新的工作组加入了长期存在的 Swift on Server 和 Diversity 工作组,使感兴趣的用户可以更有针对性的加入专门的工作组来做出贡献。核心团队正在研究创建更多的工作组,包括一个致力于提高 Swift 跨平台可用性的工作组。


核心团队更新


Mishal Shah 将加入核心团队。作为支持 Swift 项目的底层基础设施的领导者和倡导者,Mishal 在一段时间以来对 Swift 项目的发展方面发挥了重要作用。

语言发展

语言工作组专注于在五个主要语言领取取得进展:

  • 并发性。完成对 Sendable 和 actors 提供的严格数据隔离的语言支持。计划包括关闭一些已知的线程安全漏洞,例如围绕全局变量和某些 cross-actor 调用的漏洞。它还包括增加语言特性,配备一些功能来解决因 strict isolation 而产生的可用性问题,例如允许 non-Sendable 值在受限情况下在隔离域之间移动。

  • 泛型。语言工作组打算致力于可变参数泛型语言特性工作。这是一个预计需要多年时间才能完成的重要功能,最初侧重于设计核心语言模型并实现编译器和运行时基础架构来支持它。一个早起的里程碑将是允许元组类型在其元素符合 Equatable 等协议时有条件地符合协议。

  • 所有权:

    • 开发功能让程序员明确控制内存中的值的所有权。包括禁止隐式拷贝,在上下文之间转移所有权,及明确地“借用”数值而不复制它们。

    • 添加对 non-copyable 类型的基本支持。这将提供通过限制关键值的生命周期来实现高性能的新方法。这些控制将启用处理内存中数据的新方法,将当前“不安全”结构的性能与 Swift 标准库功能的安全性相结合。

  • 宏。开发宏的基础知识,并进一步支持创建丰富的库和 DSL。这项工作将从创建 vision document 开始,为宏能够在 Swift 中实现什么以及它们如何融入语言进行设计。

  • C++互操作性。

    • 编写文档,阐述如何使 C++ API 在 Swift 中可用,反之亦然。

    • 稳定当前在 Swift 中使用 C++ 的原型互操作性特征,包括 owned value types、trivial value types、API 模式(如外部引用类型和迭代器),及一些关于方法、指针、l-value 和 r-value 引用的一些基本问题。

    • 稳定当前用于从 C++ 使用 Swift 的原型互操作性功能,包括 Swift 值类型、引用类型和函数如何公开给 C++ 的方式。

在 Swift 的演进过程中,任何由这项工作引起的语言更改都将被视为正常的。语言工作组还专注于改进和澄清演进过程,并将发布管理提案过程的详细文档,以及提案作者和审稿人的指南。

此外,语言工作组正计划为即将到来的 Swift 6 语言模式完成预期的语言修订。Swift 会定期引入新的语言模式,以便语言可以在不破坏现有代码的源兼容性的情况下取得进展。


构建系统集成和改进


编译器开发团队正在努力改进编译器与构建系统和其他自身调用的互动方式:

  • 允许构建系统与 Swift 编译器进行更深入地集成,让他们在构建 Swift 程序的方式上有更大的灵活性,并使构建更加稳健。这项工作包括使 Swift 编译器向显式模块加载的方向发展,并将模块依赖的发现和编译分离到单独的编译器调用。还包括增加发现模块的链接时依赖关系的能力,允许构建系统直接调用链接器本身,而不是要求通过 Swift 编译器来调用它。

  • 提高自动生成的 Swift 文本接口和二进制模块基础设施的质量,以帮助库作者更可靠、更高效地发布他们的 Swift API。还将增加相关的诊断方法,以培养良好的工程实践。

  • 开发特性以实现灵活的软件集成,使不同团队以不同节奏开发的软件组件在编译时和运行时都能顺利地集成。


软件包注册


Swift 软件包管理器的开发重点是与社区合作,一起开始开源软件包注册服务器实现的工作。目标是创建将 Swift 软件包生态系统从基于源代码控制的生态系统过渡到基于注册表的系统所需的技术组件,从而增强生态系统的安全性和可靠性。其计划将与 Swift Package Index 等社区运行的项目合作。


实施方面的改进


编译器开发人员正专注于实现层面的改进:

  • 开发一个用纯 Swift 编写的 Swift 解析器,其功能与当前的 C++ 实现一样完整。这为工具开发开辟了新的方向,并将最终取代 C++ 解析器。

  • 通过将类型推理实现迁移到支持 multi-statement closure 推理的更可扩展的基础设施,提高结果生成器的类型检查性能。

  • 通过与类型检查器更紧密地集成,提高代码补全和依赖查找的工具的可靠性,如快速帮助和跳转到定义,尤其是在不完整或不明确的代码中。

  • 在某些情况下,通过消除对转换单元的需要,在转换函数时产生更少的代码,尤其是在向泛型和导入函数时。

  • 通过解释类型布局的紧凑编码而不是发出专门的函数,在复制和销毁复杂的结构体和枚举时,生成更少的代码。

  • 增加 SIL 优化器对新的语言特性的支持,以及与 object lifetimes 和拷贝有关的可预测的优化。团队正在设计一套新的低级 SIL 工具,以便在现有的优化管道中保持所有权不变。这将导致可靠的诊断和可预测的性能。

  • 在 Swift 中重写当前的程序间 side-effect 和 escape analyses,取代当前的 C++ 实现。新的实现提供了更准确的结果,而且明显更简单。


文档工作组


新成立的文档工作组很高兴能够推动整个 Swift 生态系统为实现更好的文档体验。在接下来的一年里,工作组将改进工具以解决文档需求,并指导新的工作,为 Swift 项目的文档做出贡献。

为了鼓励 Swift 生态系统中更多、更好的文档,工作组的举措将包括两个方面:

  • 简化使用 Swift-DocC 开始编写和发布文档的过程。其中一个目标是使开发人员无需配置额外的插件就能生成文档。

  • 扩大 Swift-DocC 的范围,支持多目标项目配置和长篇散文内容。对于由多个库组成的包,支持将包作为一个整体而不是每个单独的库发布文档。

  • 该工作组还将支持新开源的 《Swift 编程语言》一书的开发,目标是用新资源库的内容取代现有的出版方式。这项工作将包括定义为 Swift 语言编写优秀文档的准则,其长期目标是为整个 Swift 生态系统定义文档准则,类似于 API 命名准则。


网站工作组


新成立的网站工作组致力于从以下几个方面改进 swift.org 网站:

  • 改进网站访问量最大的页面的内容,包括主页、入门指南和下载页面。重要的是,这些页面的使用是直观的,包括正确的信息,以实现这一目标。工作组还希望提高文档的可发现性,这是网站访问者经常寻求的另一个领域。

  • 迭代布局设计和导航。工作组计划推出一个可视化设计系统的基础,该系统可以帮助社区在特定领域做出贡献,如 Swift on Server 指南。

  • 鼓励更广泛的 Swift 社区参与 swift.org 的发展,使其更容易为网站和 Swift 文档做出贡献。

  • 鼓励发布社区驱动的博客文章,简化流程,明确此类文章的准则。

  • 继续探索基于 Swift 的生成网站的技术。

Swift on Server Workgroup


Swift on Server工作组将继续专注于推进 Swift 在服务器和 Linux 上的状态,与社区合作创建高质量的库和工具,并提高业界的认同度。该工作组重点在以下几个方面:

  • 推动整个服务器生态系统全面采用 Swift 并发模型,将 async/await API 作为面向用户的 API 的标准。

  • 推动高级服务器端功能的标准化,包括跟踪、中间件、HTTP 通用类型和基本路由/HTTP 服务器类型

  • 提高对如何使用 SwiftPM 插件来提高服务器用例的工具状态的认识,包括部署到云平台。

  • 增加 Swift 项目官方支持的所有平台的工具链、库和工具的覆盖率和一致性。

  • 扩大 swift.org 上提供的针对服务器的指南。

  • 在流行的行业工具(如 Dependabot、GitHub Security Advisory DB 等)中提升对 Swift 的支持。


差异化的 Swift


将继续支持 AI/ML 应用与差异化 Swift 的工作,重点是以下几点改进:

  • 通过修复可区分的 Swift 中影响生产应用程序的问题来提高健壮性。随着时间的推移,观察到的这些问题越来越少,但是在问题跟踪器中仍然有一些已知的问题(许多与简单的复制程序有关)。

  • 使用差异化的 Swift 显著提高编译代码的性能。一个例子涉及编译器生成的通过 Swift 函数的“向后传递”。原则上,这个传递的执行速度应该与该函数的原始(“向前”)版本差不多。目前,在许多情况下,向后传递的速度要慢上几个数量级;在接下来的一年里,工作人员计划进行一些优化,这些优化应该会大大加快向后传递的速度。

  • 实现对 KeyPath 的性能改进。虽然严格上来说不是差异化的 Swift 的一部分,但在优化强类型模型进行自省时,关键路径变得非常重要。作为第一步,需要努力向编译器套件添加一组强大的关键路径基准。

语言的变化要会经历一个演变的过程,所以要关注你感兴趣的工作的讨论探索、主题和提案审查。

更多详情可查看:https://www.swift.org/blog/focus-areas-2023/