这是我们GHC活动报告的第十四版,其中描述了我们在Well-Typed开展的GHC和相关项目的工作。当前版本大致涵盖2022年8月和9月的月份。您可以在ghc-activities-report标签.

背景介绍:我们在Well-Typed工作的一个方面是支持GHC和Haskell岩芯基础设施。包括IOHK和GitHub在内的多家公司通过哈斯克尔基金会为我们提供我们也在与Hasura开更好的调试工具和HLS的改进.我们代表全体人民非常感激Haskell社区为这些公司提供支持。

如果您有兴趣提供资金,以确保我们能够请继续或扩大这种工作联系.

当然,GHC是一项大型社区工作,Well-Typed捐款只是其中的一小部分。本报告的目的不是提供详尽的图片全部的GHC工作正在进行中这里省略了目前正在开发的一些很棒的功能,原因很简单目前我们没有人以任何方式参与其中。此外,我们提到的仍然是许多人的工作。在许多情况下,我们只是在帮助解决最后几个问题集成步骤。我们非常感谢为GHC做出贡献的每一个人!

团队

当前GHC团队包括本·加马里,安德烈亚斯·克莱宾格,马修·皮克林,祖宾·达加尔萨姆·德比郡.Well-Typed内部的许多其他人更偶尔地为GHC做出贡献。

发布

  • 8月和9月由于节假日的缘故是平静的月份,现在我们的注意力正在转向即将推出的9.4.3、9.2.5版本和9.6分支。

  • Zubin一直在准备GHC 9.2.5并支持关键运行时性能修复,如#21755到分支机构。

驾驶员

  • Matt完成了接口文件的扩展,允许整个核心程序存储在接口文件中。这提高了GHCi的重启时间,并可以大幅提高涉及多个Template Haskell的项目的编译时间拼接。(!7502)

  • Matt调查了许多与接口文件决定论有关的问题添加了一些CI作业,以检查我们是否正在生成确定性接口。(!8895)

编译器性能

  • 安德烈亚斯调查了在#18532,事实证明,当前的行为已经是最佳的。

  • Andreas调查了#22200。这导致!9055其中有几个关键改进改进了编译时间,使用-dcore皮棉约15%在普通情况下,约30%在边缘情况下。

  • Matt进行了另一轮空间使用调查,并修复了一些简化程序中的漏洞。在编译非常大的代码时,这些更改最为明显模块。修复的重点是确保我们没有保留旧的绑定简化程序通过。(#22102,!8896)

打字检查器

  • Sam改进了GHC的选择方式。在尝试解决想要的约束,通过选择最弱的量化约束前提条件(如果存在)。此修复程序#22216#22223.

错误消息

  • Sam完成了一个补丁,并在错误消息中添加了错误代码(!8849). GHC使用新诊断程序发出的所有错误和警告基础设施现在带有相关的唯一代码,例如错误:[GHC-53633]模式匹配是多余的。这些可以用于查找up文档,例如Haskell错误索引。这是哈斯克尔基金会建议.

代码生成

  • Andreas更改了标记推断传递,以应用于!8747.特别是返回静态已知被正确标记的变量的代码,以及数据到标签,将从这一更改中受益,并将生成更高效的代码。

  • Ben和Andreas修复了代码生成错误#21968有时会导致错误的结果编译而不优化。

  • Andreas已修复#22042其中GHC有时在GHCi内部产生无效的字节码。

  • Ben修复了代码生成中的一个错误intMulMayOflo公司#在AArch64上(#21624)和已更新测试-演示来测试受影响的代码路径。

  • Ben修复了x86_64上代码生成中的一个错误(#21968)在某些情况下,开关鉴别器可以抨击一个活生生的价值观。

  • Ben修复了LLVM代码生成器中的一个错误,该错误会破坏GHC生成的初始值设定项。(#22019)

核心到核心管道

  • 安德烈亚斯被调查#21960关于9.2/9.4点版本中的回归。他们被追踪到简单的修复#21694Simon Peyton Jones在!8862.

  • 安德烈亚斯确认#22075其中,GHC有时会在编译涉及以下内容的程序时进入无限循环Simon Peyton Jones随后修复的递归顶层绑定!8905.

运行时系统

  • Ben在中修复了一个错误新阵列阵列#在9.2中,当初始化卡片数组时,零大小的数组将出现整数下溢。(#21962)
  • Ben继续教授运行时链接器有关构造函数/解构器优先级的知识,提高了与C++代码互操作的可靠性。(#21947年)
  • Ben诊断并修复了非移动收集器中的一个错误,在该收集器中,对象可能被不适当地清除。(#21885)

分析

  • Ben修改了GHC对IPE信息的处理,大大减少了风险大小并提高了初始化效率。(!8868)

图书馆

  • Ben完成并合并了他的线程自省分支,允许用户程序枚举线程并查询每个程序的标签、状态和堆栈。(!2816)
  • Ben重新设计了例外来源建议并重写了他的原型实现。

包装

哈德良

  • Matt通过增加可用的并行度来改进Hadrian构建时间。在完整版本上总时间是这些补丁之前的75%。(!8879)
  • Sam对Windows上的Hadrian引导进行了一些改进。

基础设施

  • Ben致力于解决各种CI问题(#21986年)并开始在CI下测试交叉编译器(#21480)
  • Ben完成了他的工作,移除了制作从GHC的源代码树构建系统,从存储库中删除超过10kLoC。(#17527)
  • Ben研究了公证macOS二进制分布的可行性。(#17418)