目前正在进行许多编译器项目。请联系 Jameson Nash 获取更多详细信息,并告诉我们您对这个贡献领域具体感兴趣的方面。这样,我们就可以更好地根据您的兴趣和技能定制您的项目。
LLVM 别名分析 (175-350 小时) Julia 语言使用 LLVM 作为代码生成的后台,因此代码生成的质量对于性能非常重要。这意味着对于那些了解或对 LLVM 感兴趣的人来说,有很多机会可以通过参与 Julia 的代码生成过程来做出贡献。我们最近遇到了 memcpy 信息仅接受单个别名元数据参数的问题,而不是为源和目标提供单独的信息。在我们由 LLVM 的 Pass 生成的或使用的别名信息中,还有其他类似的缺少描述性或优化步骤。
预期成果:改进 Julia 代码生成的“LLVM 级别”的别名信息。
技能:C/C++ 编程
难度:困难
宏卫生重新实现,以消除当前方法固有的错误预测 (350 小时)
对于想要学习 Lisp/Scheme 的人来说,这可能是一个不错的项目!我们目前的算法以多遍的方式运行,这意味着有时我们在比为每个值分配实际作用域更早的遍中计算出变量的错误作用域。参见 https://github.com/JuliaLang/julia/labels/macros,特别是诸如 https://github.com/JuliaLang/julia/issues/20241、https://github.com/JuliaLang/julia/issues/53667、https://github.com/JuliaLang/julia/issues/53673 和 https://github.com/JuliaLang/julia/issues/34164 等问题。
预期成果:理想情况下,重新实现卫生宏。实际上,解决部分或全部 macros
问题。
技能:希望具备 Lisp/Scheme/Racket 经验,但并非必需。
难度:中等
改进变量的调试信息输出 (175 小时)
我们已经具备了部分用于表示变量的 DWARF 信息的基础设施,但仅限于有限的几个地方。我们可以做得更好,因为有很多改进的机会!
预期成果:能够在 gdb 中查看更多变量、参数和对象细节 推荐技能:这些项目中的大部分都涉及算法工作,需要愿意并感兴趣地了解如何与大型系统集成。
难度:中等
导师:Jameson Nash、Gabriel Baraldi
代码覆盖率报告显示了所有 Julia Stdlib 包的良好覆盖率,但并不完整。此外,覆盖率工具本身(–track-coverage 和 https://github.com/JuliaCI/Coverage.jl)可以进一步增强,例如提供更准确的语句覆盖率,或更高的精度。一个成功的项目可能会结合一些构建代码和查找他人代码中的错误。
另一个相关的子项目可能是探索将类型信息添加到覆盖率报告中?
推荐技能:注重细节,喜欢提交代码问题,以及破坏事物的能力。
联系方式:Jameson Nash
正在持续进行工作以提高正确性和线程化代码。以下是一些关于如何加入这项工作的简要想法
测量和优化调度程序 partr
算法的性能,并添加根据工作负载大小动态扩展它的能力。或者用 Julia 中的 workstealing
实现替换它。
自动插入以及随后优化 GC 安全点/区域,尤其是在循环周围。类似地,对于 ccall
,实现定义特定 ccall
作为安全区域的能力。
解决运行时中的各种线程安全性和数据竞争错误。(例如 https://github.com/JuliaLang/julia/issues/49778 和 https://github.com/JuliaLang/julia/pull/42810)
加入定期安排的多线程电话会议,以讨论 Julia 语言公共活动日历上的 #多线程 BoF 日历邀请 中的任何内容。
推荐技能:因项目而异,但通常需要一些多线程和 C 经验
联系方式:Jameson Nash
Nanosoldier.jl 项目(以及相关的 https://github.com/JuliaCI/BaseBenchmarks.jl)测试了一些更改对性能的影响。但是,仍然存在许多未涵盖的领域(例如编译时间),而其他领域则覆盖过度(大大增加了测试持续时间而没有带来任何好处),并且某些测试可能未针对统计功效进行适当配置。此外,当前的报告非常原始,只能进行基本的成对比较,而图表和其他交互式工具将更有价值。因此,对于暑期贡献者来说,这里会有很多很棒的项目可以解决!
预期成果:改进 Julia 的自动化测试/基准测试框架。技能:对 CI 系统感兴趣和/或有经验。难度:中等
联系方式:Jameson Nash、Tim Besard