Swift 项目公布 2026 年 GSoC 成果:三个项目全部完成
来源标题:GSoC 2026 Showcase
Swift 项目公布 2026 年 Google Summer of Code 成果,今年开展的三个项目全部顺利完成。项目由导师带新贡献者共同为 Swift 及其生态开发新功能,内容包括为 SourceKit-LSP 增加 DocC 语言特性等。官方博客列出了每个项目的学员、导师及完整说明链接。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
文档
社区
软件包
博客
安装 (6.4.2)
文档
社区
软件包
博客
安装 (6.4.2)
GSoC 2026 展示
Konrad 'ktoso' Malawski
Sam Khouri
2026 年 11 月 5 日
Swift 项目在 2026 年再次参与了 Google Summer of Code,将开源新人导师配对,为 Swift 及其生态系统构建新功能。
今年,我们开展了三个项目,全部成功完成:
以下是每个项目的简要总结,并附有完整报告的链接。
学员:Padmashree S S
导师:Matthew Bastien、Prajwal Nadig
项目报告:[GSoC 2026] SourceKit-LSP 中的 DocC 语言特性
DocC 是 Swift 的文档编译器。它将代码中的文档注释以及 Markdown 文章和教程转换为可浏览的文档。在这些注释和文件中,符号链接指向代码中的类型、函数或属性,以便读者可以直接跳转过去:
/// 一种按名字问候他人的类型。
///
/// 调用 greet(_:) 生成问候语,或当没有名字可用时
/// 使用 Greeter/defaultName。
struct Greeter {
static let defaultName = "World"
func greet(_ name: String) -> String {
"Hello, (name)!"
在本项目之前,编辑器无法识别这些链接,因此你不得不手动查找引用的符号。DocC Markdown 文件也没有语法高亮。
Padmashree 扩展了 SourceKit-LSP(Swift 的语言服务器),使其能够理解 DocC,从而在你编写文档时,编辑器可以提供帮助:
由于这些功能是在 SourceKit-LSP 中实现的,它们并不局限于某一款编辑器。它们在任何支持 Language Server Protocol (LSP) 的编辑器中都能工作,例如 VS Code 或 Vim。
学员:Ege Kaya
导师:Alastair Houghton、Mike Ash
项目报告:[GSoC 2026] Swift Concurrency 的 Task 和 TaskGroup 跟踪
Swift 程序使用任务来并发执行多项操作。这些任务可能处于不同的状态,例如正在运行、休眠,或等待另一个任务完成。
此前,Swift 运行时没有可查询进程的活动任务注册表,例如用它来检测“卡住”的任务,这使得诊断这些问题变得困难。
Ege 的项目专注于实现一个高性能、始终开启的注册表,允许并发运行时跟踪进程中的任务。
像 lldb 这样的调试器以及其他工具(包括 swift-inspect)可以读取这个注册表,为开发者提供有关其程序中任务活动的宝贵洞察。
由于每次任务的创建和销毁都会触及该注册表,设计上专注于对现有代码的性能影响最小化。为了避免伪共享,注册表被拆分为 64 个独立的列表,或称分片。
在一个模拟 Web 服务器的压力测试中,短时间内创建了超过 600,000 个任务,跟踪它们在一个 0.37 秒的运行中增加了约 0.015 秒;你可以在 Ege 的报告中阅读更详细的分析。
学员:Filip Sakel
导师:Pavel Yaskevich
项目报告:[GSoC 2026] swift-syntax 的限定名查找
基于 swift-syntax 构建的 Swift 宏、linter 和代码生成器可以读取 Swift 代码的结构,但无法轻松执行上下文查找。
对于工具开发者来说,获得这些答案意味着依赖 swift-syntax 之外的库,或者自己手工实现查找,而这是一项很难做对的任务。
Filip 为 swift-syntax 的 SwiftLexicalLookup 模块添加了限定名查找。它建立在 GSoC 2024 项目的基础上,该项目引入了词法作用域和非限定名查找,后者已经为 swift-java 中的功能提供支持。限定查找可能很难做对,如下例所示:
struct MyView { // <- 在 struct MyView {} 中,查找名为 'model' 的成员
#if true
var model: Model // <- 在类型 'Model' 中,查找名为 'sayHi()' 的成员
#endif
extension MyView {
typealias Model = MyModel
final class MyModel {
func sayHi() { print("Hi") }
在这个例子中,我们需要处理 MyView 类型的扩展,才能发现 MyView 内部拼写的 Model 类型实际上通过 MyView 定义下方扩展中定义的 typealias Model 指向 MyModel 类。手动实现这类查找非常困难,我们很高兴能将此功能内置于 swift-syntax 中!
与贡献者合作并看到他们的项目帮助 Swift 取得更大成功,总是一件令人愉快的事。感谢贡献者、导师以及在今年项目中提供帮助和支持的所有人!
想了解更多?请访问 Swift 的 Google Summer of Code 页面,探索往年的项目,并了解如何参与未来的项目。
欢迎来到“Swift 新动态”,这是一份精心策划的 Swift 项目与社区中的版本发布、视频和讨论摘要。
文档
社区
软件包
博客
安装
工具
Xcode
Visual Studio Code
Emacs
Neovim
Cursor
其他编辑器
社区
概览
Swift Evolution
多元化
导师计划
贡献
治理
行为准则
许可证
安全
配色方案偏好
浅色
深色
自动
版权所有 © 2026 Apple Inc. 保留所有权利。
Swift 和 Swift 标志是 Apple Inc. 的商标。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。