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

非常感谢我们的赞助商,他们使这项工作成为可能:安督瑞尔,哈苏拉Juspay公司此外,我们很感激水银为改进的特定工作提供资金GHC、HLS和相关项目的绩效。然而,我们需要更多的赞助支持团队!如果贵公司能够出资支持这项工作,请阅读有关如何提供帮助的信息联系.

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

团队

Well-Typed的GHC团队包括本·加马里,安德烈亚斯·克莱宾格,马修·皮克林,祖宾·达加尔,萨姆·德比郡罗德里戈·梅斯基塔,使用Jaro Reinders公司加入团队实习。Well-Typed内部的许多其他人更偶尔地为GHC做出贡献。

发布

类型检查器和重命名器

  • Sam和Matthew重构了ZonkerTcLclEnv公司分别用于解耦编译器的各个部分,大大减少了模块Haskell语法树和解析器的依赖项。

  • Sam改进了模式匹配检查-符号,这意味着GHC将不再在代码中虚假地发出不完整的模式匹配警告例如做{x@(右{})<-;设z={右y->y}的情形x;…}

  • Jaro转换了独特国际64字(!10568). 这避免了在32位平台上耗尽uniques的问题,这困扰了一些大型软件包,例如潘多克阿格达.

  • Sam彻底改变了对表示-多态标识符。这使我们能够执行表示-对不在参数位置的类型进行多态性检查,如有必要捕捉#primop(参见#21906#21868).这也允许接受更多的程序,例如(#,#)@(RR Int)x y可以接受,其中相对应力是这样的类型族RR积分减少到混凝土运行时代表(例如国际代表处).

记录

  • Sam修复了GHC 9.6中导致记录更新不完整的回归不再发出警告。

  • Sam修复了记录字段弃用中的回归(!10761).

  • Sam确保记录字段无字段选择器不由导入导入列表中的顶级变量导入(!10759). 他也这样做了导入列表中拼写错误的项目现在会引起类似名称的建议。

错误消息和警告

  • Matthew使用新的错误消息基础结构打印中的不同错误消息全球温室气体排放指数(!10305),以避免提出以下建议:set-程序包文本除此之外没有任何意义全球温室气体排放指数.

  • Matthew修复了一些有关精美打印和显示的问题警告(!10595,!10752).

  • Sam已完成将错误消息迁移到新的诊断基础结构(!10908).

  • Sam为GHC添加了列出它可以发出的所有错误代码的功能(!10857). 这允许编写检查错误覆盖率的测试测试套件中的代码。

  • Sam修复了一个回归,其中不可接触的类型变量信息自9.6以后不再包含在错误消息中(!10800).

简化程序

  • 马修调查了一个棘手的问题,涉及多态专业化和类型检查插件(#23469). 短期内,他准备了一个默认禁用多态专门化的补丁(!10719),直到我们能够找到一个更健壮的解决方案。

  • Matthew研究了一个编译时循环(#23553),确定这是由修复程序的后端口丢失导致的#22272(!9160).

  • Matthew在中发现并修复了一个错误规则匹配导致编译器崩溃(#23630,!10891).

驾驶员

  • Matthew修复了-S公司编译时的标志.cmm(厘米)文件(!10817). 这个组合很可能从未被普通用户使用,但它被用于测试-演示测试套件。

  • Zubin调整了GHC API,以允许HLS等客户对查找缓存(#23604,!10897).

运行时系统

  • Matthew在即时评测中实现了一些缺失的功能应该有助于调试由于堆栈分配更改而导致的回归(!10483).

  • Ben确保-恐怖分子在生成时正确传递给C编译器运行时系统,并修复了由此出现的错误(!9579).

  • 本取代了老式的显性屏障负载/商店/功能从RTS,选择使用C11样式的获取/释放操作。特别是,这为GHC增加了C11型围栏操作(!10628).

  • Ben通过确保分配固定考虑到对齐,这样我们就不会超出块大小进行分配(!10524).

  • Ben修复了由调用导致的死锁出口从信号处理器内部发出,这是不安全的;相反,我们打电话给_退出只执行最小的清理(#23417,!10511).

  • Ben引入了对捕获输入的thunk信息表的支持堆栈,由-forig thunk信息标志。这样做更容易调试线程在黑洞上被阻塞的原因(#23255,!10271).

  • Ben修复了一个达尔文错误,其中FFI_GO_关闭未定义宏尽管被依赖(#23568,!10750).

代码生成

  • Andreas确定了问题的根本原因,其中AVX指令集在某些平台上未正确启用(#23718).

  • Ben和Rodrigo确保数据构造函数包装器得到正确的Lambda表单信息,以避免撞车(#23146,!10165).

  • Ben修复了处理MulMayOflo公司AArch64上的primop(#23721个)并改进了该操作的测试基础设施测试-演示.

  • Ben开始合并和移植各种内存排序修复程序他在过去几个月里收集了很多。

链接

  • Matthew调试了GHCi链接问题(#23580)追溯到缺乏支持对于地址#文字。已经添加了对这些功能的支持,以及后台移植这个改变解决了这个问题。

  • Ben实现了几个与分割,允许在Windows上重新启用此标志(!9810,!10959).

  • Ben描述并确定了动态链接性能缓慢的原因关于达尔文(#23415).

  • Ben使用离线原子修复了运行时系统链接器对AArch64工具链的支持(#22012).

  • Ben致力于为nullary数据构造函数工人修复字节码生成(#23210).

包装

  • Matthew让GHC发出必要的构建元数据信息需要用于GH杯为夜间GHC发布提供支持(!10473,!10705,!10808).

  • 马修修正了emsdk公司在损坏后的构建图像中使用由于工具链的意外升级而引入(#23641).

  • Matthew升级了i386 CI跑步者,使用Debian 10构建绑定列表(!10769).

GHC构建系统

  • 罗德里戈在运行时可重定向GHC方面取得了重大进展他的工作ghc工具链(!9263). 我们计划很快发布一篇包含更多细节的博客文章。

  • 本通过规范化修正了哈德良在符号链接存在的情况下的行为top目录(#22451,!10559).

  • Ben在CentOS平台上修复了Hadrian的几个问题(!10760).

  • Ben到处工作ld.黄金生成无效的静态构造函数表拒绝使用i386ld.黄金(!10764).

  • Ben修复了一个Hadrian错误,其中C源的依赖信息可能是使用与编译不同的标志生成,导致中断避免重新编译。

哈多克

  • 芬利最终晋级hi-haddock公司工作,允许Haddock重复使用接口GHC创建的文件,以生成文档(!10469). 还对Haddock实现了其他内存使用改进。

  • Matthew修复了Haddock中默认方法显示错误的错误输出(#23616).

  • 芬利确保Haddock注释正确插入AST用于背包签名模块(!10370).

CI和测试

  • Matthew发现一些性能测试对微小的变化很敏感由于位于堆栈溢出边界上,并按顺序添加了一些选项稳定这些测试(!10507).

  • Matthew声明依赖蟒蛇3-dev-程序包修复运行linting作业的CI计算机的构建环境问题(ci-图像MR 121).

  • Ben添加了一个测试,用于测试基础包装(!9816).这将确保对GHC的任何捐款不会在无意中产生任何对的更改基础为了改进开发人员的工作流程,他还使CI作业能够将意外的测试输出保存为CI人工制品(!10535).

  • Ben改进了测试-演示testsuite和支持x86-64上i386代码生成的测试(试验方案MR 10)

  • Matthew致力于整合测试-演示测试套件到默认CI管道中。目标是能够在可能的合并请求上运行测试套件影响代码生成。在补丁开始和完成之间,有些补丁是merged引入了test-primops捕获的错误!(!10910)

  • Matthew精简了合并请求验证管道。最近出现了几个需要排队的情况合并请求的CI,我们希望尽可能减少此延迟。因此,现在每个合并请求上默认运行的作业更少,但开发人员可以请求通过应用~完整ci标签。完整CI仍在上运行每个合并批处理以防止任何错误提交进入树。

头部黑客攻击

  • 马修提高了格拉法纳的表现头部黑客攻击分配仪表板。

核心库

  • Ben已实施CLC提案144CLC提案153,拒绝文件路径s包含内部NUL(无)s和提供的变体{新,带有}CStringLen哪一个NUL(无)-终止它们的输出。这确保了我们不会自动截断任何文件路径秒(#13660,!10110).

  • Ben继续实施CLC/GHC联合计划用于将GHC的内部构件与基础并引入ghc实验实验接口包。

  • 亚当发现了一只健康虫(#23454)由于缺少角色而导致上的批注SNat公司,SChar公司S符号马修打开了一个CLC建议添加缺少的注释。

  • Ben添加了unsafeTawByte数组#primop,与现有的unsafeFreezeByteArray#primop公司(#22710,!9739).

GHC提案

  • GHC指导委员会接受了Adam的提案581:特定名称空间进口(#23781).这将更容易区分类型和数据导入和导出列表中的名称空间,并将修复的设计显式命名空间扩展。它建立在Artyom的努力之上库兹涅佐夫和其他人在之前的提案中。