我们很高兴能支持哈斯克尔基金会规划苏黎世前2023年6月7日至9日在苏黎世为新GHC贡献者举办的研讨会(以及在线研讨会)。在此处了解更多信息并表达兴趣.

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

我们很高兴Juspay公司正在赞助这项工作。非常感谢他们和我们的其他赞助商,包括github通过哈斯克尔基础、和IOG公司.我们还与哈苏拉水银与GHC相关的具体改进,例如具有核心定义的接口文件.

然而,我们的一些赞助协议即将结束我们需要更多的赞助以维持团队!如果贵公司能够出资以确保我们能够请继续这项宝贵的工作阅读有关如何提供帮助的信息联系.

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

团队

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

我们很高兴欢迎罗德里戈·梅斯基塔为团队提供未来六个月的实习期。罗德里戈将致力于实现安全重新安装温室气体template-haskell模板图书馆(#20742). 这个是一个关键步骤,它将解锁更好的交叉编译,更健壮工具支持,以及GHC中库兼容性的潜在改进版本。

发布

  • Ben和团队一直在忙于9.6版本(#22562).几个字母表已经发布预计很快就会有候选人。Sam在9.6迁移指导.

  • Matt和Ben于12月发布了9.4.4版,修复了9.4系列中的各种错误。

  • Zubin准备了9.2.6版本,将于2月发布。

驾驶员

  • Matt完成并从一个贡献者那里获得了一个补丁,修改了插件初始化点,以便插件可以安装挂钩(#21279,!9824).

  • Matt修复了发现的多家庭单元支持中的各种错误测试新Cabal对启动多单元会话的支持时(!9618).

编译器性能

  • Matt和Zubin调查了部分重新加载时GHCi内存的使用情况。他们发现并消除了相当多的泄漏,从而在:重新加载(!9787).

  • Matt修复了使用带有核心定义的接口文件时的一个错误(!9869).

运行时性能

  • Ben在中修复了一个意外的回归MutVar(无功功率)#由于内存而产生的性能围栏(#22764,!9718).

  • Andreas研究了许多与内联相关的运行时性能问题,专业化,可嵌入NOINLINE公司杂注(#22321,#22609,#22689,#22781,!9723). 他正在进行的工作允许NOINLINE公司可嵌入成为组合,使NOINLINE公司功能(!9621).

  • 安德烈亚斯打开了一个GHC提议与传递专业化的一些想法.

  • Andreas调查了伊森(#22115)这是由三个独立的问题引起的:

    • Ben很快修复了代码生成回归(!9718).
    • 实施的变更由于部分寄存器暂停而导致回归的实例。这是一个已知的问题(#20405)当时修复程序尚未应用于所有分支。
    • 由于构建产品结果优化的变化而导致的回归(#22983).
  • Andreas在中诊断出运行时性能回归数据。旧列表。{maximumBy,minimumBy}第9.2.5条(#22609,!9565).

前端

  • Andreas诊断出一个问题不透明杂注触发了编译器死机(#22502).

  • Sam提出了一个补丁,添加了Template Haskell对explicit的支持对于所有人实例中的量词(!9840).

  • Matt修复了中某些定义的模块位置全球总部。类型s用于可输入(#22510,!9459).

错误消息

  • Matt在检查时改进了穷举检查程序的错误消息与一起移动的语句应用Do(#22483,!9460).

运行时系统

  • Ben调查了MacOS Ventura上反复出现的运行时崩溃(#22497个),其中原来是GMP库,需要回传到9.2,9.4和9.6分支。

  • Ben开始考虑改进RTS符号的链接故事,这是分销包装商长期以来头疼的问题(#17157).

  • Ben修复了运行时系统的C源代码中的警告清理问题,并修复了Hadrian以确保它们保持干净(!9579)

垃圾收集器

  • Andreas修复了GCing的火花问题(#22528)有时会产生火花按顺序计算而不是并行计算。

  • Andreas在对从TH评估的CAF进行GCing时调查并修复了一次碰撞(#22417).这修复了在静态构建目标(如Windows)上涉及TH的一些长期存在的虚假段错误。

  • Ben对非移动垃圾收集器进行了重大改进:

    • 修复了在非移动写屏障中对空数组的处理(#22931).
    • 大大改进了弱#对象,这些对象以前可能没有及时完成(#22327).
    • 修复了与setNum功能(#22926,#22927).
    • 确定并修复了GC选择器优化实现中缺少的写入障碍(#22930).
    • 通过限定同步暂停中的标记工作,显著改善了某些程序的暂停时间(#22929).
    • 继续实施并行标记支持。
    • 提高了派驻报告的准确性。
  • 在处理GC时,Ben还通过ThreadSanitizer工具识别并修复了RTS中的一些数据争用(!6232,!9371,!9372,!9482).

代码生成

  • Sam改进了GHC如何跟踪使用Cmm寄存器的类型。特别是,这有助于确保SIMD向量寄存器以一致的方式使用(!9167).

  • Ben诊断并修复了一个AArch64后端问题,该问题导致图形着色寄存器分配器在编译时崩溃(-弗雷格图)正在使用中(#22798).

  • Andreas修复了由于Cmm和Bytecode后端之间的差异导致的标记推断分析中的错误导致的运行时崩溃(#22840).

  • Andreas错误地避免了将包含未装箱元组的大型构造函数拆箱到其他构造函数中(#22309,!9724).如果需要,它们仍然可以显式取消装箱。

  • Ben固定-fsplit截面在Windows上(#22834).

  • Ben修复了MacOS上与链接相关的编译失败(#21972).

测试套件

  • Andreas更新了无纤维蛋白纤维基准测试套件,以确保它可用于即将发布的9.6版本,以及其他一些小的调整。

  • Ben改进了无光纤比较实用程序。

  • Matt增加了9.4.4版的问题测试,但已经修复。

  • Ben发现测试套件出现故障-有螺纹的并且启用了健全性检查,并开始修复这些问题。

包装

  • Matt修复了未安装手册页的问题。

  • Matt对构建系统和打包进行了各种修复,包括为发布构建启用分割。

  • Matt添加了一个标志,用于从接口文件中省略自我编译信息您永远不会尝试重新编译包的情况。这个避免生成中出现非确定性。

  • Ben撞上了GHC附带的Windows工具链(#21293,!9683).

  • Matt添加了对LLVM 15的支持,同时删除了对LLVM 10的支持。此后,GHC将支持LLVM 11至15。

  • Zubin修复了二进制分发配置脚本的一个问题,该脚本没有检查找到命令可用(!9777).

  • Matt添加了用于自动生成的元数据的脚本GH杯。当一个新的发布后,元数据将发送到GH杯容易维护的人员使用它添加对新版本的支持GH杯。元数据生成于夜间和释放管道,现在用于测试许多不同的二进制分布平台。

CI公司

  • Matt将CI跑步者升级为对CI使用GHC 9.4.3。

  • Matt修复了达尔文CI跑步者的各种问题,因此他们可以重新启用,增加CI容量。

  • Matt添加了Ubuntu 18.04夜间发布作业。

  • 本增加了一份Rocky Linux CI工作,填补了Centos 7退休后留下的空缺。

  • Ben原型基础设施,用于收集CI中的硬件性能计数器指标,以更可靠地捕获代码生成回归(!7414).

头部黑客攻击

ghc调试

  • Matt添加了对跟踪静态引用表(SRT)的支持ghc调试.

支持用户/贡献者

  • Matt通过运行时循环查看了一个报告的问题,并将其诊断为预期行为,涉及与特定于项目的重叠实例的交互。

  • Ben再现并描述了影响用户的链接问题(#22803).

  • Sam审查并协助Georgi Lyubenov的MR记录与null构造函数一起使用的通配符(!9004).

  • Sam审查了Andrew Lelechenko的几份MR,其中消除了在GHC的代码库中。

  • 本还订了许多其他的票(#22527,#22538,#22561,#22631,#22714,#22322,#22777,#22640,#22595,#22566).

稳定性

  • Ben撰写并领导了核心图书馆委员会的提案,增加了新的国外。C.ConstPtr.公司。ConstPtr公司类型,有助于解决#22043.

  • Ben开始评估基础全球总部*模块名称空间是在公共API和GHC-内部API之间实现更清晰分离的第一步基础.

  • Ben引入了CI支持,用于跟踪基础帮助确保核心库的更改得到应有的审查(!9816).

  • Sam做了一个CLC提案关于弱指针终结期间出现的异常的报告。在就这个问题达成协议之前,GHC的错误报告已恢复原状,用户可以根据自己的意愿自由更改。