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

非常感谢我们的赞助商,他们使这项工作成为可能:安督瑞尔,哈苏拉Juspay公司.此外,我们感谢水银为GHC、HLS和相关项目改进绩效的具体工作提供资金。

然而,我们需要更多的赞助以维持团队!如果您的公司能够提供资金来维持这项工作,请阅读有关如何提供帮助的信息联系.

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

团队

Well-Typed的GHC团队包括本·加马里,安德烈亚斯·克莱宾格,马修·皮克林,祖宾·达加尔,萨姆·德比郡芬利·麦克尔瓦恩.此外,Jaro Reinders公司最近完成了我们的实习。Well-Typed内部的许多其他人更偶尔地为GHC做出贡献。

发布

前端

类型检查器和重命名器

  • Sam使用修复了不正确的作用域行为隐式参数这就是结果约束求解器重构(!11013).

  • Sam删除了允许GHC的模式同义词错误恢复机制在模式同义词未能进行类型检查后蹒跚而行:我们只是失败了相反,这避免了不可预测的敲打后果(#23467,!11114).

  • Sam修复了在导出列表(#23570,!11107).

  • Sam审查、调试并完成!10860GHC贡献者Antoine Leblanc。这项工作防止了.hs(小时).hs-引导文件来自导致编译器死机。

  • Sam确保我们始终使用不能满足的补足缺失的班级类实例的方法无法满足上下文,即使有默认方法可用,也可以避免意外运行时循环-fdefer类型错误(!11075).

错误消息和警告

  • Sam改进了围绕未使用项的逻辑和错误消息类型和数据族实例声明中的类型变量,修复几个问题(#23768,#23778,#23734,#23784).

  • 马修补充道-Winconsistent标志警告标志,用于控制在以下情况下触发的警告传递给GHC的命令行标志不一致。这允许用户需要时将警告静音(!11213).

  • Sam添加了查询给定的所有诊断代码的功能GHC版本通过新的哈德良目标发射代码代码:过时(!11079).

优化

  • Ben确保使用规格争论总是专门化的无论sc_最大_参数限制(#14003,!11225).

  • 安德里亚斯发现了一个使用魔法的问题无线功能会妨碍严格性分析(#23911个).

驾驶员

  • Matthew确保当决定是否重新链接(#23724,!11178).

  • Matthew恢复了一个长期错误的补丁-optP(optP)无法作为选项总是传递给C编译器(#16737).

后端

运行时系统

  • Ben确保IO管理器在Windows上可靠关闭(!10905).

  • Ben重构了非移动垃圾收集器中的并发标记,避免在每个主要GC循环中创建新线程,从而改进堆栈导致的内存使用(!11048).

  • Ben修复了AArch64上缺少的原子操作符号错误(!11172).

  • Ben调查了GHC 9.2中可能存在内存泄漏的问题(#23949).

Primops公司

  • Ben为数组读取指令添加了缺失的获取障碍必须确保在内存顺序较弱的平台上的稳定性(#23541,!10953).

  • Ben简化了原子修改MutVar2#,消除非线程RTS中的冗余负载(!11005).

代码生成

  • Andreas确保AArch64代码生成器不会发出过大的代码条件跳转指令(#23746,!11254).

  • Ben在使用ThreadSanitizer时修改了寄存器的处理,使ThreadSantizer工具化可用于大型程序。他几乎已经完成了合并他长期运行的ThreadSanitizer工作中的更改(!10203).

  • Ben改进了描述thunk更新的内存排序属性的文档(!11007).

  • Ben更改了将堆栈对齐标志传递给LLVM的方式(#23870个,!11124).

  • Ben修复了AArch64代码生成器对子字长乘法的处理,并改进了测试-演示测试套件(#23721).

  • Ben开始调试一个神秘的运行时崩溃(#23952).

链接

  • Ben确保Windows链接器将PE节编号解释为未签名(#22941,!10959).

  • Ben描述了达尔文的动态链接性能,由用户报告的低代码加载性能提示(#23415).

分析

  • Andreas修复了导致中出现问题的JSON字符转义错误分析报告(#23924).

  • Finley实现了一个更改,允许用户细化构造函数集-fdistict-constructor表应用于,它可以显著减少包含可信息来源信息的二进制文件的大小(!10958).

  • 芬利实施了-fd区分结构-表-每个模块标志,可用于获取包含数据构造函数的per-module分配统计信息的堆配置文件(!11068).

  • 芬利补充道-(f){no-}信息表-使用-{堆栈,回退}旗帜,它允许用户控制堆栈闭包的信息表还是信息表带有默认源位置的表包含在信息表映射中(!10926).

  • Finley修复了一个导致某些不受约束的实例字典的IPE信息丢失源位置的错误(!11242).

  • Finley在使用编译时提高了编译器性能-查找表映射(!11023).

图书馆

  • 本介绍了两个新的图书馆,ghc内部ghc实验.这些是作为哈斯克尔基金会技术建议书51以帮助稳定基础库。

  • Ben重构了例外情况回溯ghc-proposal 330变成不同的供核心图书馆委员会审议的次级方案在下面CLC提案164.

  • 公开CLC提案209添加对EPOLLRDHUP公司事件埃波尔GHC事件管理器的后端支持此活动。这将启用服务器应用程序在客户端关闭时取消正在进行的工作其连接的接收端。

  • Jaro提交CLC提案187关于使用本机操作加快速度枚举字64枚举Int64在32位平台上。提案的实施(!10825)可以将性能提高1.5倍在i386和5.6x上使用JavaScript后端。

  • Ben记录了readFloat(读取浮点)函数需要一个成比例的运行时输入的大小,因此应避免使用不受信任的输入(!11246).

  • Matthew在基准套件上测试了9.8个预发布版本的性能属于字节删除,文本容器,确定单一回归(#23822).

构建系统、CI和分发

GHC构建系统

  • Matthew添加了一个新的重定位二进制dist允许创建的目标GHC的可重定位二进制分布。这特别有用在Windows上,作为以前创建二进制分发的机制我们都知道它坏了。

  • Matthew对ghc工具链确保其生产与configure脚本兼容的结果(!10976),修复了几个问题(#23720,#23689,#23681,#23676).

  • Matthew在提取Hadrian以允许构建第二阶段交叉编译器。这使得交叉编译器符合我们构建普通编译器,还允许我们构建第三阶段编译器用于新体系结构(#19174).

  • 本加了一张支票C99码支持ghc工具链(!11131).

CI和测试

  • Matthew对CI实施了几个修复(!11089). 尤其是,这一点得到了改善附在GHC MR上的标签如何触发其他管道;例如,一个可以指定仅当完全ci标签或测试-演示标签存在。

  • Matthew在CI中添加了Debian 12和Fedora 38版本。

  • Ben已启用测试-演示以在32位平台上运行。

包装

  • Matthew添加了aarch64-alpine和aarch64-deb11绑定器(!10594).

  • Matthew修复了一个错误,我们在该错误中安装了同一手册页(!11085).

  • Ben确保许可证文件被正确复制到二进制发行版(!11294).

  • 马修撞了MAXOSX_部署_目标10.13(#22938,!11210).

  • Zubin确保将python文件作为依赖项进行正确跟踪哈德良的文档目标(!11072).

  • Ben恢复了用户指南与旧版Sphinx的兼容性(!11073).

  • Ben固定断裂:base-ref:用户指南中的参考(!11337).

  • Zubin调查了由于字节删除子模块bump和RTS头文件(#23789,!11088).