2021年GSoC项目构想
此页面包含我们在 GSoC 2021 期间热衷于开发的潜在项目构想的非详尽列表。如果您想作为 GSoC 学生申请,请按照以下步骤开始
- 请通读此页面和 Google Summer of Code 指南,
- 确定或提出您自己感兴趣的项目构想。
- 查看开发论坛以联系潜在的导师。
- 当您在论坛上发起关于您有兴趣参与他们提供的特定导师项目的帖子时,请随时提及项目导师。
今年在论坛上发布关于 GSoC 的帖子时,请使用 gsoc-2021
标签,以便于识别。
联系导师的技巧
Swift 论坛由 Discourse 驱动,Discourse 是一个讨论论坛平台,内置了许多垃圾邮件防范机制。如果您是第一次加入论坛,您可能无法向导师发送私信,因为这需要最少程度的先前参与,之后“发送私信”功能才会自动启用。
如果您想私下联系导师,而不是发布公开论坛帖子,并且论坛暂时不允许您发送私信,请直接通过电子邮件联系 Konrad Malawski,地址为 ktoso @ apple.com
,邮件主题中包含 [gsoc2021]
标签,并描述您想从事的项目 – 我们会将您转交给合适的导师。
潜在项目
追踪类型检查器的类型推断
描述
Swift 使用编译时类型推断来实现清晰简洁的语法。有时,程序员不清楚 Swift 为何在其源代码中推断出特定类型。一个探索类型推断来源的工具可以消除类型检查器推断出程序员未预期的类型时的困惑,并且可以极大地增强他们对语言的理解。
另请参阅
- GSoC 2020 页面,减去交互式命令行工具部分,因为编码周期较短)
预期成果/益处/交付成果
- 深入了解 Swift 类型推断的约束系统如何工作。
- 实现对导致求解器推断类型的约束的跟踪,以及一个编译器标志,用于将包含详细类型推断来源的解决方案写入文件。
技能要求
熟悉静态类型检查的概念。
潜在导师
Holly Borla、Pavel Yaskevich
在属性包装器类型中引用封闭的 self
描述
属性包装器是 Swift 中一个强大的功能,用于将常见的属性模式抽象到库中。这些常见模式之一涉及手动编写的属性访问器,这些访问器引用该属性的封闭类型的 self 实例。Swift 对一项功能进行了实验性设计和实现,该功能允许将此模式抽象到属性包装器中。但是,在 Swift 正式支持此功能之前,需要改进设计和实现。这个项目将帮助您培养在协作语言设计、技术写作和编译器开发方面的技能!
另请参阅
- 属性包装器 Swift 演进提案的未来方向部分:在包装器类型中引用封闭的“self”
技能要求 精通 Swift。熟悉属性包装器更佳!
预期难度
虽然这不是一个简单的功能,但我认为这可能是一个不错的 GSoC 项目,因为它是一个高度请求的功能,不太可能在 Swift 演进中被拒绝,并且有一个实验性实现可以帮助指导学生了解需要更改的代码部分,并且有一些更好的设计理念,因此学生无需从头开始。语言功能也是吸引那些对 Swift 语言充满热情,但在编译器开发方面不太自信/没有太多经验的人的好方法。
潜在导师
Holly Borla
用于保护 Swift 软件包生态系统的透明日志系统
描述
透明日志是一种用于供应链安全的新颖方法,已被证书透明度和 Trillian 项目采用。在这个项目中,我们将探索应用这些原则来保护 Swift 软件包生态系统免受供应链攻击。参与者将参与协作设计、技术写作和服务器端开发。
技能要求
精通 Swift 或类似的基于 C 的语言。熟悉 Merkel 树、证书透明度和供应链安全更佳。
潜在导师
Yim Lee、Tom Doron
使用 Swift 编写脚本
描述
Swift 是一种有趣且功能强大的语言,人们通常也希望将其用于脚本编写需求。虽然今天可以使用 Swift 编写简单的脚本,但在这些脚本中无法使用 Swift 软件包,这削弱了语言的完整健壮性。在这个项目中,我们将定义一种用户友好的语法,用于在脚本中表达软件包依赖项,一种解决这些依赖项的方法,并将该解决方案集成到 Swift 命令行工具和 REPL 中。参与者将参与协作设计、技术写作和软件开发。
另请参阅
- SwiftPM 对 Swift 脚本的支持线程有一个初步设计,可以作为这项工作的基础。它可能需要一些润色,弄清楚项目可以旨在实现基本版本的细节。
技能要求
精通 Swift 和 SwiftPM。熟悉脚本语言更佳。
潜在导师
Boris Beugling、Anders Bertelrud、Tom Doron
增加可微编程的语言覆盖范围
描述
可微编程是一项实验性语言功能,允许开发人员创建可微闭包,定义可微协议要求,并获取函数的导数。如今,可微编程不支持许多常见的语言功能。为了增加可微编程对这些语言功能的覆盖范围,学生将设计和实现微分功能,例如可微协议要求的默认实现、作为可微函数的键路径表达式、可微 throwing 函数、枚举微分等。
技能要求
熟悉基本的微积分和编译器前端。
潜在导师
Richard Wei
Swift Numerics:Decimal64
将 Decimal64 添加到 Swift Numerics 软件包(扩展目标是也添加 Decimal128)。这些类型将绑定 IEEE 754 十进制浮点类型 (https://en.wikipedia.org/wiki/Decimal_floating_point)。根据学员的兴趣,我们可以针对特定架构上的算术运算进行有针对性的微优化,为此和其他十进制库开发测试向量,或者开始研究这些类型的超越函数。
技能要求 对数值计算感兴趣,熟悉 Swift 或 C。
潜在导师 Steve (Numerics) Canon
Swift ArgumentParser:交互模式
ArgumentParser 提供了一种在 Swift 中声明命令行界面的直接方法,其双重目标是使 (1) 创建快速简便 (2) 高质量、用户友好的 CLI 工具。对于这个项目,我们将为使用 ArgumentParser 构建的工具设计和实现交互模式,该模式会提示输入初始命令中未给出的任何必需参数。这项工作需要允许类型的部分初始化,并且可以包括用户输入的验证和自动完成等功能。
技能要求
精通 Swift 并且对命令行工具感兴趣。
潜在导师
Nate Cook
Swift 数据结构实现(优先级队列、弱集合/字典或其他有用的数据结构)
Swift 标准库目前仅实现三个通用数据结构:Array、Set 和 Dictionary。虽然这些结构涵盖了大量的用例,并且特别适合用作货币类型,但它们并非普遍是最合适的选择——为了有效地解决问题,Swift 程序员需要访问更大的数据结构库。
在这个项目中,学生将为通用数据结构创建一个生产质量的 Swift 实现,用于即使是最苛刻的应用程序。这不是一项容易的任务——实现通用集合类型要求学生在以下领域获得深入的经验,以及更多:
- API 设计(了解 Collection 协议层次结构的细微之处,深入熟悉 Swift 命名约定,尽可能以最少的 API 表面积实现尽可能多的功能,通过 API 设计避免常见错误,为未来的更改进行设计)
- 底层 Swift 实现概念和技术(不安全内存管理、ManagedBuffer、_modify 访问器、@inlinable 和类似属性)
- 测试(编写可维护的测试,涵盖每个方法的每个边缘情况,并验证协议一致性的语义要求)
- 性能(编写和分析基准测试,解决性能问题,理解和验证 (!) 性能保证,例如 O(1) 或 O(log(n)) 复杂度)
- 文档(包括记录前提条件、性能保证和常见的陷阱,如果有的话)
一个成功的项目将交付一个开源数据结构实现,作为一个 Swift 软件包,着眼于最终包含在 Swift 标准库中。数据结构是通过学生和导师之间的协商选择的——我们希望通过确保可以在可用时间内有意义地解决问题来帮助学生取得成功。
技能要求
精通 Swift,对数据结构感兴趣。
潜在导师
Karoy Lorentey
swiftmodule 文件的工具
目前,.swiftmodule 格式相当不透明,我们的工具所能提供的最佳洞察是通过 llvm-bc-analyzer 对整个模块进行完整转储。提供一个原生工具来探索 Swift 模块的内容将是一个极好的调试辅助工具和教学工具。它还将使学生接触到 Swift 编译器的核心组件。
技能要求
略懂 C++,熟悉 Swift
潜在导师
Robert Widmann
在 VSCode 中使用 SourceKit-LSP 显示 Swift 推断类型
一些 IDE 具有在源代码中内联显示推断类型的能力。最近,rust-analyser 在 VSCode 内部为 Rust 添加了类似的支持。我们也希望为 Swift 提供类似的功能。在这个项目中,学生将扩展 SourceKit-LSP,以提供 此 LSP 提案 中描述的功能。此外,他们将扩展 SourceKit-LSP VSCode 插件,以在编辑器中显示类型提示。编辑器的更改可以遵循与 rust-analyzer 实现 相同的方法。
技能要求
掌握 Swift 语言知识;对开发者工具有兴趣
潜在导师
Alex Hoppen
用于 SIL 的 Alive2
Alive2 是一个工具,可以验证 LLVM 优化过程的正确性。该工具使用 Z3 约束求解器为不健全的优化器过程生成反例。虽然该实现绑定到 LLVM IR,但 Alive2 背后的原理同样适用于 SIL。候选人将开发一个工具,该工具解析 SIL 并将 SIL 的语义集成到一组约束中,以提交给 Z3,从而验证 SIL 优化过程的健全性。这可以通过多种方式实现,包括纯 Swift 工具或直接与 Swift 编译器库集成的 C++ 工具。该工具不需要是完整的 - 仅仅能够验证 SIL 的一部分也将是一个巨大的好处。
技能要求
掌握 Swift 知识,略懂 SIL
潜在导师
Robert Widmann
更多想法
我们仍在从 Apple 内外的各个团队收集想法。
如果您有自己的想法,可以在 Development 论坛 上提出,并与潜在的导师联系。
项目必须有实际成果,并且有可能让学生在分配的约 175 个项目工时内成功完成。新的项目想法需要找到导师来认可该项目才能被接受。
今年在论坛上发布关于 GSoC 的帖子时,请使用 gsoc-2021
标签,以便于识别。