GSoC 2022 项目构想

此页面包含我们在 GSoC 2022 期间热衷于开发的一些潜在项目构想的非详尽列表。如果您想作为 GSoC 学生申请,请按照以下步骤开始

  1. 通读此页面和 Google Summer of Code 指南,
  2. 确定或提出您自己感兴趣的项目构想。
  3. 查看开发论坛以联系潜在的导师。
    • 当在论坛上发起关于您对参与他们提供的特定导师项目的兴趣的主题时,请随时提及项目导师。

今年在论坛上发布关于 GSoC 的帖子时,请使用 gsoc-2022 标签,以便于识别。

联系导师的技巧

Swift 论坛由 Discourse 驱动,这是一个讨论论坛平台,它还内置了许多垃圾邮件规避机制。如果您是首次加入论坛,您可能无法向导师发送私信,因为这需要最少量的先前参与才能自动启用“发送私信”功能。

如果您想私下联系导师,而不是发布公开论坛帖子,并且论坛不允许您发送私信(尚不允许),请直接通过电子邮件联系 Konrad Malawski,邮箱地址为 ktoso AT apple.com,并在电子邮件主题中使用 [gsoc2022] 标签,并描述您想从事的项目 – 我们会将您转给合适的导师。

潜在项目

SwiftSyntax

使用 SwiftSyntax 自身来生成 SwiftSyntax 的源代码

项目规模:大型(350 小时)

推荐技能:

预期难度:中等

描述:

SwiftSyntax 在很大程度上依赖于代码生成来定义其语法节点。这些文件目前使用 gyb 生成,gyb 是一种基于 Python 的代码生成工具,作为 Swift 编译器的一部分开发。SwiftSyntax 本身也具有代码生成功能,最近通过 SwiftSyntaxBuilder 的引入得到了显著改进。

在 Google Summer of Code 项目期间,学生将迁移当前基于 gyb 的代码生成,以使用 SwiftSyntaxBuilder,在 SwiftSyntax 内部进行 SwiftSyntaxBuilder 的自举。为了执行迁移,学生还将进一步改进 SwiftSyntaxBuilder,目标是将 SwiftSyntaxBuilder 从当前的开发状态过渡到生产就绪状态。

预期成果/益处/交付成果:

使用 SwiftSyntaxBuilder 和生产就绪的 Swift 库来生成 Swift 代码的宝贵真实世界经验。

潜在导师:

Alex Hoppen

Linux 和服务器上的 Swift

Swift 的原生 Linux 安装包(RPM、Deb 文件)

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

如今,在 Linux 上安装 Swift 工具链是通过下载 tarball 并手动安装所需的依赖项来完成的。支持 RPM 和 Debian 软件包等原生软件包将大大简化在 Linux 上使用 Swift 的过程。此类软件包的原型版本已经存在,但还需要做进一步的工作,使其成为 Swift 社区可以在生产用例中使用的高质量产品。

预期成果/益处/交付成果:

遵循 RPM 和 Debian 最佳实践的高质量 RPM 和 Debian 软件包。

潜在导师:

Tom Doron, Mishal Shah

Linux 上 Swift 的回溯支持

项目规模:中等(175 小时)

推荐技能:

预期难度:中等/困难

描述:

目前,当进程在 Linux 上崩溃时,Swift 不会生成回溯,这可能会妨碍用户排除生产问题。为了满足这一需求,Swift 服务器工作组创建了一个依赖于私有 API 的库,这只是一个临时的解决方案。此项目的目标是设计和原型化一个高质量的解决方案,可以集成到 Swift 运行时中。

预期成果/益处/交付成果:当进程在 Linux 上崩溃时,Swift 可以生成高质量的回溯。

潜在导师:

Tom Doron 或 Dario Rexin

Kafka 客户端软件包

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

Kafka 是一个广泛使用的分布式事件流平台,用于高性能数据管道。随着 Swift on Server 生态系统日趋成熟,并且语言中最近引入了并发特性,我们希望在 Swift 中提供一个 Kafka 客户端,允许生产和消费消息。此客户端应提供利用新并发特性的原生 Swift API。此外,客户端应使用 librdkafka (https://github.com/edenhill/librdkafka) 并封装其 C API。

预期成果/益处/交付成果:

实现一个封装 librdkafka 的原生 Swift 软件包,该软件包使用并发特性提供 Swift API。

潜在导师:

Franz-Joseph Busch

Swift Package Manager

改进 CLI 用户体验

项目规模:中等(175 小时)

推荐技能:

预期难度:简单

描述:

SwiftPM 主要以两种方式使用:作为集成到 Xcode 中的库和作为命令行工具。通过采用关于并发进程(如构建、测试和下载进度)的现代呈现技术,可以改进 CLI 用户体验。SwiftPM 已经拥有用于呈现的大部分所需信息,而这项工作的重点是为此信息设计和实现更好的 UX/UI。

预期成果/益处/交付成果:

改进将 SwiftPM 用作 CLI 工具的用户体验。

潜在导师:

Boris Beugling, Anders Bertelrund, Tom Doron

软件物料清单

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

软件物料清单(又名 SBOM)是一种在不同项目之间共享依赖项版本的技术。此技术对于跨多个存储库、共享相同核心依赖项以及需要在系统范围内对齐这些核心依赖项的版本的大型系统非常有用。

查看更多

预期成果/益处/交付成果:

潜在导师:

Boris Beugling, Anders Bertelrund, Tom Doron

SwiftPM 的软件包创建命令和模板支持

项目规模:中等(175 小时)

推荐技能:

预期难度:简单

描述:SwiftPM 包含一个用于创建新软件包的简单系统,该系统适用于简单的用例,但对于更复杂的开发场景来说不够灵活。为了扩展此功能,我们可以采用模板驱动系统,可能基于 SwiftPM 的插件系统。

查看更多

预期成果/益处/交付成果:

用户可以定义自己的模板或插件,以决定软件包创建子系统的工作方式。

潜在导师:

Boris Beugling, Anders Bertelrund, Tom Doron

Swift-DocC

Swift-DocC 是 Swift 的文档编译器,请点击此处阅读更多信息:Swift-DocC 现已开源

Swift-DocC 支持文档档案的差异比较

项目规模:大型(350 小时)

推荐技能:

预期难度:中等

描述:

目前,DocC 支持为框架的单个版本发布文档。但是,随着框架的发展,其 API 和文档内容也在不断发展。为了帮助框架作者和用户更好地跟踪框架中的更改,此项目探索了生成差异数据的新功能,DocC 的 Web 渲染器可以使用这些差异数据来呈现 API 更改和文档更改 UI。参与者将参与协作技术设计和 Swift-DocC 编译器开发。

预期成果/益处/交付成果:

编译文档时,用于发出差异数据的技术设计和实现。

潜在导师:

Franklin Schrans

DocC 渲染中的快速导航

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

新的 Swift-DocC 侧边栏可以轻松鸟瞰框架的文档内容,此项目探索添加快速导航 UI,以使用键盘快捷键跳转到符号,类似于 IDE 如何支持跳转到符号。参与者将参与协作 UI/UX 设计和 Swift-DocC 渲染 Web 开发。

预期成果/益处/交付成果:

文档网站中快速导航 UI 的 UX 设计、技术设计和实现。

潜在导师:

Marina Aisa、Beatriz Magalhaes

Swift 标准库/包

Swift ArgumentParser:交互模式

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

ArgumentParser 提供了一种在 Swift 中声明命令行界面的直接方法,其双重目标是使创建 (1) 快速且容易,(2) 高质量、用户友好的 CLI 工具。对于此项目,我们将为使用 ArgumentParser 构建的工具设计和实现交互模式,该模式提示输入初始命令中未给出的任何必需参数。这项工作需要允许类型的局部初始化,并且可以包括诸如验证和用户输入的自动完成之类的功能。

预期成果/益处/交付成果:交互式 CLI 的设计、实现和测试。

潜在导师:

Nate Cook

Swift

改进类型推断算法的调试输出

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

Swift 的类型推断算法(由约束求解器实现)支持在类型检查表达式时打印调试信息。此数据旨在帮助编译器开发人员了解如何/何时/什么类型被推断出来、应用了哪些限制以及在每次尝试找到解决方案时使用了哪些重载选择。不幸的是,对于复杂的表达式,约束求解器会产生大量输出,这使得即使对于经验丰富的编译器开发人员来说,也很难甚至有时不可能使用,因为求解器必须做出太多选择,并且为每个选择提供了大量不相关的信息。

此项目的目标是通过仅包含理解每个推断类型和遇到的错误的来源的重要信息,并更改输出的格式和演示方式(包括总体和每个组件的格式和演示方式),使约束求解器的输出对人类友好。

预期成果/益处/交付成果:

新的和改进的约束求解器调试输出,对于经验丰富的编译器开发人员和项目新手来说都更容易使用。

潜在导师:

Pavel Yaskevich

Swift 和 C++ 互操作性

Swift 和 C++ 互操作性是一个持续的开源项目,旨在使从 C++(反之亦然)使用 Swift API 更加方便。它由 Swift 和 C++ 互操作性工作组 牵头。

将 Swift 错误处理模型桥接到 C++

项目规模:大型(350 小时)

推荐技能:

预期难度:中等

描述:

本项目建立在正在进行的开源工作的基础上,该工作旨在将 Swift API 公开给 C++,方法是添加对公开可以将 Swift 错误 throw 抛出的函数的支持,并提供 C++ 类,使用户可以从 C++ 处理 Swift Error 值。

本项目有两个主要方面。首先,参与者需要扩展 Swift 模块的 C++ 接口生成器,以便为 Swift 函数发出 C++ 接口,这些函数可以 throw,以及表示 Swift Error 类型的 C++ 类。然后,参与者需要实现一个 C++ 异常类,该类包装 Error 类型,以及一个类似于提议的 std::expected 类 的 C++ 类,以便为不使用 C++ 异常的客户端提供错误处理。参与者将需要编写测试用例来验证实现。参与者在进行实现时还需要与 Swift 开源社区互动。

预期成果/益处/交付成果:

潜在导师:

Alex Lorenz

将带有关联值的 Swift 枚举桥接到 C++

项目规模:中等(175 小时)

推荐技能:

预期难度:中等

描述:

本项目建立在正在进行的开源工作的基础上,该工作旨在将 Swift API 公开给 C++,方法是添加对将带有关联值的枚举公开给 C++ 的支持。这些枚举在 Swift 语言指南 中有文档记录。

参与者需要扩展 Swift 模块的 C++ 接口生成器,以发出一个 C++ 类,该类表示带有关联类型的 Swift 枚举。还需要扩展生成器以发出 C++ 成员函数,这些函数允许在 C++ 中执行以下操作

参与者将需要编写测试用例来验证实现。参与者在进行实现时还需要与 Swift 开源社区互动。

预期成果/益处/交付成果:

潜在导师:

Alex Lorenz

为 C++ 标准库类型提供 Swift 覆盖

项目规模:中等(175 小时)

所需技能:

预期难度:中等

描述:

Swift 和 C++ 互操作性是一项正在进行的开源计划,旨在使从 Swift(反之亦然)使用 C++ API 更加方便。它由 Swift 和 C++ 互操作性工作组(https://forums.swift.org/g/cxx-interop-workgroup,https://forums.swift.org/c/development/c-interoperability/82)牵头。本项目建立在正在进行的将 C++ API 公开给 Swift 的工作的基础上,方法是为 C++ 标准库类型(如 std::string 和 std::vector)提供一些 Swift 覆盖。

参与者将需要编写 Swift 代码,以便为多个 C++ 标准库类型(如以下类型)提供对标准 Swift 协议(如 Collection)的遵循

这些遵循应构建为单独的覆盖模块,类似于 Darwin 覆盖,并在 Swift 工具链中提供。参与者将需要修改 CMake 构建脚本以启用构建和打包覆盖模块。参与者将需要编写测试用例来验证实现,并且还需要在进行实现时与 Swift 开源社区互动,以获取代码审查并做出回应。

预期成果/益处/交付成果:

参与者将更多地了解 Swift 的类型系统、Swift 标准库协议以及 C++ 标准库类型(如 std::stringstd::vector)。参与者还将更多地了解使用开源编译器代码库。

如果成功实现此项目,Swift 用户将能够将某些 C++ 标准库类型(例如 std::vector)与 Swift 标准库提供的 API 一起使用。例如,这将使能够使用 Swift for-in 循环迭代 std::vector,或在其上调用 compactMap 方法。

潜在导师:Egor Zhdan 和 Alex Lorenz