我们正在聘请Haskell专家从事GHC、开源和商业方面的工作Haskell项目!了解更多信息。

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

我们在Well-Typed工作的一个方面是支持GHC和Haskell岩芯基础设施。包括IOG和GitHub在内的多家公司通过哈斯克尔基金会为我们提供我们也在与哈苏拉水银关于具体改进。我们代表全体人民非常感激Haskell社区为这些公司提供支持。

如果您有兴趣提供资金,以确保我们能够请继续或扩大这种工作阅读有关如何提供帮助的信息联系.

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

团队

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

发布

  • Zubin编制并发布了GHC 9.2.5。

  • 本开始准备分叉GHC9.6。

驾驶员

  • Ben开始全面修改GHC如何处理本地工具链交互。这个这项工作是使GHC成为运行时可重定向编译器所必需的最后一个先决条件之一。这项工作计划在GHC 9.8着陆。(#一九八七年)

  • Matt开发了一个原型,用于为简化程序添加并行性。目前这些都显示了编译时间的适度改进,但我们希望将其集成到这个-jsem公司为更大的收益而努力。(!9356)

  • Matt修改了驱动程序,以便在构建项目时捕获时间信息可以计算构建图的简单统计信息,例如最长路径(!9435). 这个旨在让用户能够捕捉到他们在其模块中引入并行化导入链的情况结构。

  • 萨姆写了GHC提案#540它提出了一种基于信号量的并行细粒度控制机制之间温室气体阴谋集团Sam在GHC中基于道格拉斯·威尔逊(Douglas Wilson)在马特(Matt)的帮助下制作的原型。

    使用具有8个功能的-jsem编译pandoc和所有依赖项时的核心利用率

编译器性能

  • 安德烈亚斯帮助着陆!4140,允许GHC解包总和类型。大部分工作最初是由前Well-Typed公司的奥默·西南·阿卡恩完成的,大部分是重新设定基调由黑曜石系统的贡献者完成。

  • Matt在GHCi中进行部分重新加载时调查了一些空间泄漏。由于一种组合由于种种原因,GHCi将保留本应收集的模块的旧副本。修复这些泄漏将开发包所需的内存量减半。例如,Agda内存使用从2.4G降至1.3G。(#22530个)

  • Zubin修复了使用GHCi时出现的内存泄漏-黑线鳕和没有-fwrite接口过度懒惰导致留住整个GHCi会话的中间编译工件(!9494).

类型检查器和重命名器

  • Sam一直在对重命名器进行大修,简化其处理方式记录字段并使迁移记录消歧逻辑成为可能从类型检查器到重命名器。这将修复许多错误(#22125,#21898,#21959,#21443).

  • Sam一直在帮助GHC撰稿人Soham Chowdhury改善导入和导出列表,以改进错误消息(请参阅#21826).

错误消息

  • Sam帮助GHC贡献者Andrei Borzenkov将错误消息迁移到新的诊断基础结构全球总部。重命名。Expr公司.

代码生成

  • Sam修复了一些错误厘米涉及未装箱和的相互作用和SIMD矢量。(#22187,#22296)

  • Andreas修复了一个错误,即使用未装箱金额会导致GHC对“找不到插槽”感到恐慌。(#22208)

  • Ben介绍了对ThreadSanitizer的代码生成支持(!6232),使消毒剂能够全面查看GHC编译程序执行的内存访问。这揭示了许多潜在的内存排序问题(例如#22468)现在已经解决了(!9372).

  • Ben完成并合并了一个补丁重复数据消除字符串解包thunk,大大减少了包含许多字符串文字。(#16014)

  • Ben修复了AArch64 NCG在处理需要符号扩展的操作时的正确性问题。(#2012年)

核心到核心管道

  • Andreas在9.4.3和9.2.5中修复了一个错误,其中过度的eta-expansion会有时会导致程序停止共享工作,从而导致灾难性的速度减慢重复执行相同的工作(#22425)

运行时系统

  • 安德烈亚斯调查了isByteArrayPinned(按字节排列)#,可能在将大字节数组添加到压缩范式对象中时,会在运行时导致segfaults。

  • Andreas修复了使用基于spark的并行时的竞争条件。当它触发时,一些火花被认为已经熄灭,收集不当,导致并行度大大降低。(#22528)

  • Ben调查了一些非移动GC问题,在此过程中引入了一些重要的延迟优化。(#22264)

  • Ben继续工作,从贡献者John Ericson开始,将运行时系统的配置GHC顶层的脚本逻辑配置脚本。这项工作的目标是清理GHC、其引导工具链和运行时系统之间的依赖关系,以帮助交叉编译工作。

  • Ben重构了信息表来源信息的表示,大大减少了其大小和对链接时间的影响。(#22077)

图书馆

  • Matt修复了一个错误,其中一些有线标识符被赋予了错误的模块可输入证据。(!9459)

  • Ben继续致力于完善例外来源建议(!8869). 虽然遗憾的是,修订后的提案本身无法及时通过GHC指导委员会提交GHC 9.6,但我们计划在GHC 9.8之前完成这项工作。

测试套件

  • Matt在测试框架中实现了生活质量的改变,改进某些测试失败时的错误消息。(!9249)

  • Ben开始在GHC的测试套件驱动程序中引入对交叉编译器测试的支持。(!9184)

ghc调试

  • Matt完成了对跟踪静态引用表的支持。因此,现在可以进行调查由保留的静态对象引起的泄漏。

  • Matt改进了终端UI中的进度报告ghc调试.

  • Matt添加了一些新的分析脚本,用于调试重复的字符串和字节数组。

  • Andres改造ghc调试的终端UI,具有新的配色方案和其他渲染改进。

  • Finley修复了一个长期存在的错误,该错误只能连接到检测进程一次。现在可以连接和断开与进程的连接按你的意愿多次。