Swift 2023:强调并发、泛型和 C++ 互操作性,开发 Swift 解析器


Apple Swift 团队的一名工程师兼语言工作组成员 John McCall 在最新发布的一篇博客中介绍了 Swift 的 2023 年度计划。

“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 值类型、引用类型和函数 exposed 给 C++ 的方式

此外,语言工作组还正计划为即将到来的 Swift 6 语言模式完成预期的语言修订。Swift 定期引入新的语言模式,以便语言可以在不破坏现有代码的源兼容性的情况下取得进步。以及编译器开发团队正在努力改进编译器与构建系统和自身其他调用的交互方式。

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

2023 年针对 Swift 的其他努力还包括:

  • 开发一个 Swift 解析器,它是用纯 Swift 编写的,并且具有当前 C++ 实现的功能。这开辟了工具开发的新方向,最终将取代 C++ 解析器。

  • 通过将类型推理实现迁移到支持 multi-statement closure 推理的更具可扩展性的基础架构,提高结果 result builders 的类型检查性能。

  • 通过与类型检查器更紧密地集成,提高 code completion 和 lookup-dependent 工具(例如快速帮助和跳转到定义)的可靠性,尤其是在不完整或不明确的代码中。

  • 在某些情况下,通过消除对转换 thunk 的需要,在转换函数时生成更少的代码,尤其是在将 closures 传递给通用函数和导入函数时。

  • 通过解释 type layout 的 compact encoding 而不是发出 specialized functions,在 copying 和 destroying 复杂的结构和枚举时生成更少的代码。

  • 添加 SIL 优化器支持新语言功能和与 object lifetimes 和 copies 相关的可预测优化。团队正在设计一套新的 low-level SIL 实用程序,以在整个现有优化管道中保持所有权不变性。这将导致可靠的诊断和可预测的性能。

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

更多详情可查看博客。 


相關推薦

2023-04-01

Swift 5.8 已经正式发布了! 这个版本包括改进开发者体验,改进 Swift 生态中的工具,包括 Swift-DocC、Swift Package Manager 和 SwiftSyntax,完善Windows 支持 等等。 开发者体验 改进的 Result Builder 实现 在 Swift 5.8 中对 Result Builder 的实现进

2022-06-12

P3 现已发布,具体更新内容如下: 与 Objective-C 的并发互操作性 Swift 语言带有一组并发特性,包括异步函数和 actors。Objective-C 语言没有它们,因此异步 API 是通过使用 completion handlers 手动表达的。由于 Swift 和 Objective-C API 之间

2022-02-08

职责就是负责开发和设计 C++ 和苹果开发的 Swift 之间的互操作性模型。 在公告中,Swift 开发者 Alex Lorenz 表示,之所以要成立 Swift 与 C++ 工作组是如今已有大量的开发者对这两种语言之间的双向互操作性产生了极大的兴趣。

2022-07-26

者,但这两者的关系不像 Java 和 Kotlin 那样具有“双向互操作性”,因此很难稳定地迁移。至于 Carbon,它与 Rust 有许多相同的目标,并且支持与现有的 C++ 代码完全互操作,目标是让开发者尽可能轻松地从 C++ 迁移到 Carbon。

2022-09-13

全新的语言支持和字符串处理的 API 开发者体验 新的泛型实现 除了上述用于处理泛型的语言改进之外,类型检查器的泛型实现也从头开始重写,在正确性和性能方面都有所改进。 新的实现修复了许多长期存在的错误,主

2023-08-23

工作重点将聚焦于“持续关注生态系统发展、采用结构化并发、扩充文档和指南、以及改进工具”等方面。 持续关注生态系统发展 除了支持现有库之外,今年还包括一些重点领域: Swift 原生 Memcached 客户端 一个通用的

2023-11-15

在持续上升。Rust 与 C++ 类似,但具有内存安全或安全并发等更高级的功能,使其成为高性能大型应用程序的完美选择。该语言最近在 web3/区块链领域颇受欢迎,例如 Solana 合约不是用 Solidity 制作的,而是采用的 Rust。 虽然 R

2024-03-07

Swift 5.10 现已发布,此版本在并发语言模型中实现了完全的数据隔离。公告称,“这一重要的里程碑经过了多年的积极开发,历经多个版本。” 并发模型是在 Swift 5.5 中引入的,包括async/await、actors 和结构化并发 (structured concurre

2022-11-14

起最迅速的语言之一,也是为什么与流行的现有语言的互操作性可以极大地促进使用和采用的典型例子之一。但近期以来,TypeScript 在该榜单中的排名却总是停滞不前。在过去的三轮调查中,TypeScript 一直保持第八的位置;本季

2023-05-04

以纯 Swift 形式重写 Foundation 框架,以改善 Swift 的跨平台开发。近日,基于 Swift 重写的 Foundation 发布了首个 Preview 预览版。 Foundation 框架是苹果 macOS 和 iOS 的基础组件支持核心,几乎所有的 Swift 项目都使用 Foundation 框架,其

2022-07-27

C++ 的继任者,但该语言可能永远无法实现与 C++ 的充分互操作性以实现顺利迁移。 针对“为什么 Carbon 基于与 C++ 17 而不是 C++ 20 的互操作性”,Carruth 回答称,当时在他们使用的已发布的编译器中,C++20 还不够完善。但之后如

2023-06-08

可变函数。此外,这些参数可以是不同的类型。参数包与泛型等概念相结合时,可以使代码更加灵活和可重用。 下面的示例来自苹果官方 swift 示例仓库: struct Pair<First, Second> { let first: First let second: Second init(_ first: Fir

2023-06-08

可变函数。此外,这些参数可以是不同的类型。参数包与泛型等概念相结合时,可以使代码更加灵活和可重用。 下面的示例来自苹果官方 swift 示例仓库: struct Pair<First, Second> { let first: First let second: Second init(_ first: First, _

2022-09-19

于使用的抽象。 可复用:Unilang 对一等对象(first-class) 的强调使几乎任何源程序组件都更比往常意义上更容易复用——只要语言的用户愿意。 可扩展:Unilang 的基础语言和语言扩展的底层设计使开发者能有机会以前所未有的方