2019 年 GSoC 项目构想
此页面包含我们渴望在 2019 年 GSoC 期间开发的潜在项目构想列表。如果您想作为 GSoC 学生申请,请按照以下两个步骤开始:
- 通读此页面,并确定您感兴趣的项目构想。
- 查看开发论坛,与潜在的导师联系。
潜在项目
将 libSyntax 与编译器管道的其余部分集成。
描述
此项目旨在集成 libSyntax 树,并在编译器管道(类型检查器、诊断程序等)的其余部分中使用它。它将涉及
- 从 libSyntax 树派生 AST 节点
- 让解析器仅生成 libSyntax 树
预期成果/益处/交付成果
一个健壮的架构,将解析功能与编译器管道的其余部分清晰分离,并为未来将增量重新解析集成到编译器管道的工作奠定基础。
所需技能
- C++(熟悉)
- 编译器管道基础知识
潜在导师
Rintaro Ishizaki
预期难度
中等/困难
为 SourceKit-LSP 实现代码格式化功能
描述
SourceKit-LSP 是 Swift 和基于 C 的语言的语言服务器协议的实现。该协议定义了基于范围的代码格式化功能,SourceKit-LSP 中缺少此功能。任务是为 Swift 添加代码格式化功能,使用可用的基于 swift-syntax 的代码格式化工具之一,例如 swift-format。
预期成果/益处/交付成果
- 增强 swift-format 以提供 API,允许基于范围的格式化,而不仅仅是整个文件。
- 通过集成 swift-format for Swift,为 SourceKit-LSP 实现代码格式化。
- 确保从 Visual Studio Code 中使用时,SourceKit-LSP 的代码格式化功能能良好运行。
所需技能
- Swift(熟悉)
潜在导师
Harlan Haskins, Ben Langmuir
预期难度
简单/中等
通过 SourceKit-LSP 为 Swift 标准库创作提供一流支持
描述
SourceKit-LSP 为 Swift 和基于 C 的语言提供全面的语言支持,适用于支持 LSP 协议的编辑器,例如 VSCode 和 SublimeText。它支持 SwiftPM 项目和 clang 的编译数据库。Swift 标准库有一个自定义的构建过程,这阻止了 StdLib 作者利用 SourceKit-LSP 来获得开发体验。任务是进行必要的更改,使 SourceKit-LSP 能够为 Swift 标准库的创作提供一流的支持。
预期成果/益处/交付成果
- 增强 Swift StdLib 的构建过程,以生成编译数据库和索引数据
- 确保索引机制考虑到 Swift 的
#sourceLocation
,以允许跳转到定义功能,直接跳转到 StdLib 的原始gyb
文件。 - 确保从 Visual Studio Code 中使用时,Swift 标准库的创作功能能良好运行。
所需技能
- 熟悉 Swift, C++
潜在导师
Nathan Hawes
预期难度
简单/中等
Linux 上的 Swift 调试支持
描述
LLDB 是 Swift 的首选调试器。调试器比编译器更依赖于底层平台,因此,在操作系统之间保持实现对等性更具挑战性。该项目的最终目标是在 Linux 上提供与 macOS 上相同的调试体验。
预期成果/益处/交付成果
- Linux 上禁用了多项测试(由于历史原因,或者因为提交的原始作者没有时间进行调查),应审核并重新启用这些测试。
- 我们有用于 macOS 的远程镜像,但它需要在 Linux 上完全正常运行还需要一些工作。这将有助于简化/使关键代码路径更健壮,并在 Linux 上完全支持弹性。
- 某些数据结构的格式在 Linux 和 macOS 之间有所不同。我们可以为它们编写格式化程序。
- Ubuntu 是目前唯一完全支持的操作系统。有人报告说在其他发行版上成功运行了 swift-lldb,如果我们能够修复由于库差异等引起的错误,那就太好了。
所需技能
C++ 知识。了解调试器的工作原理是一个加分项。了解 swift 对象内存布局是一个加分项,但可以在适应期内获得。
潜在导师
Davide Italiano
预期难度
简单/中等
Swift 标准库的可扩展性基准测试
描述
Swift 标准库包含大量性能关键型算法。我们需要能够跟踪它们的行为,并识别其整体性能的重大变化,最好是在这些更改进入代码库之前。
现有的 Swift 基准测试套件在衡量特定工作集的性能方面做得很好。但是,我们还需要跟踪算法性能如何随输入大小变化。
例如,一项略微提高了 400 元素字典的插入性能的更改,结果可能会显著降低 10 元素或百万元素字典的速度。为了就是否应用此类更改做出明智的决定,我们需要能够将性能与输入大小绘制成曲线;我们不能仅仅依赖于单个数值。
此项目的目标是通过可扩展性测试来增强现有的基准测试套件。任务是设计一个 Swift 模块,用于定义和运行此类基准测试,并提供一种自动收集、比较和可视化结果的方法。系统需要能够识别同一基准测试的两次运行之间是否存在重大变化,并且需要以一种让工程师一目了然地分析结果的形式呈现结果——例如下面的对数-对数图。
预期成果/益处/交付成果
Swift 贡献者定义可扩展性基准测试的能力,以及在 CI 服务器上运行这些测试并在 GitHub PR 界面上直接报告结果的 PR 测试触发器。
所需技能
熟悉 Swift
潜在导师
Karoy Lorentey
预期难度
简单/中等