跳到内容
此存储库已于2024年8月3日由所有者存档。它现在是只读的。

ghc 9.6的hi-haddock #1597

已合并
将20个提交合并到
2023年6月8日
已合并

ghc 9.6的hi-haddock #1597

将20个提交合并到
2023年6月8日

对话

芬利·麦克尔瓦恩
复制链接
合作者

@芬利·麦克尔瓦恩 芬利·麦克尔瓦恩 评论2023年6月1日

我正在努力让hihaddock越过终点线。我打算执行的步骤是:

  • 合并这个MR,这将使hi-haddock在黑线鳕的ghc-9.6分支上可用。
  • 将此工作合并到ghc-head分支
  • 向GHC HEAD提交MR,更新黑线鳕子模块,以包括合并的黑线鳕鱼工作

此MR已完全完成并准备合并,我已验证测试通过(使用GHC的补丁版本,其中包括相关数据族文档的修复)。我没有观察到性能下降,只是基线黑线鳕生成的内存使用略有改善(只是默认值黑线鳕). 在Agda代码库上测试-秒统计数据包括:

堆中分配了38109588176个字节GC期间复制11122078776字节548141736字节最大驻留时间(26个样本)8119640字节最大斜率使用的内存总量为1552 MiB(由于碎片导致0 MiB丢失)总计时间(已用)平均暂停最大暂停第0代9091 colls,第0部分5.779s 5.876s 0.0006s 0.0191sGen 1 26 colls,0第3.893节第4.089节第0.1573节第0.5272节任务:5个(1个绑定,4个峰值工作人员(总共4个),使用-N1)火花:0(0已转换,0溢出,0哑弹,0 GC,0失败)初始时间0.004s(经过0.004s)MUT时间9.167s(已过去10.767s)GC时间9.672秒(已过去9.965秒)退出时间0.018s(已过0.003s)总时间18.862s(经过20.740s)每秒分配率4157131469字节生产力占总用户的48.6%,占用总时间的51.9%

与当前测量的基线性能相比ghc-9.6型黑线鳕:

堆中分配的37907128536字节GC期间复制11181486680字节556370840字节最大驻留(24个样本)7191536字节最大斜率正在使用的内存总量为1581 MiB(由于碎片导致0 MiB丢失)总计时间(已用)平均暂停最大暂停第0代9048 colls,0 par 5.948s 6.002s 0.0007s 0.0049sGen 1 24 colls,0 par 4.005s 4.191s 0.1746s 0.5561s任务:6个(1个绑定,5个峰值工作人员(总共5个),使用-N1)火花:0(0已转换,0溢出,0哑弹,0 GC,0失败)初始时间0.004s(已过0.004s)MUT时间9.778秒(经过11.120秒)GC时间9.952秒(已过去10.193秒)退出时间0.018s(已过0.011s)总时间19.752秒(已过去21.327秒)分配率3876731318字节/MUT秒生产力占总用户的49.5%,占总运行时间的52.1%

仅在最大驻留空间方面略有改进(~8MB)。乐意按照要求进行更改,并在必要时提供更多指标。

编辑:上述指标受到一些环境和工具配置的影响,这些配置在最初提交本请购单时未被考虑。幸运的是,Hi-Haddock对Haddock的内存使用有更大的(积极的)影响。查看我的博客帖子在这里.

克莱杜科斯 和其他补充16提交 2023年6月1日14:03
接受Hoogle测试中的几个更改:漂亮的打印逻辑不再打印`(代理(…))`带有括号的Bug806中的链。因为这次测试只是为了要验证是否没有换行,请接受更改。`为类和数据声明调用tyThingToLHsDecl`,结束向上“合成”类型变量并提供未引用类型种类签名。因此,键入“类型->类型”类型的变量`现在在Hoogle输出中打印有亲善签名。这可能会通过从类变量中手动删除种类签名进行更改如果行为被认为不可接受,则在Hoogle后端执行。有时,附属声明与它们的父声明(例如记录选择器)。在这种情况下,类型为“extractDecl”中的导出项拼凑签名。由于此类型签名是非常手动构造的,因此它可能缺少由“tyThingToLHsDecl”构造的decl的种类签名。例如,“type-sigs”Hoogle测试。将Hoogle测试参考中的“*”更改为“Type”。我认为这不会破坏Hoogle行为,因为它似乎不考虑类型搜索中的签名。我还没有完全证实这一点。
GHC漂亮打印代码的更改导致了一些与Haddock的LaTeX输出的差异。-类型变量在LinearTypes测试-类型族表达式中的通配符类型现在打印编号,例如,在TypeFamilies3测试中的_1_2-DefaultSignatures测试中的组合签名现在已记录在案作为单独的签名
-停止在html测试源中使用kind`*`-必要时添加TypeOperator以避免警告和将来的错误-重命名一些测试模块以匹配其模块名称
`lookupOccEnv`用于解析“OccNames”并附加警告,但它不在记录字段名称空间中查找。因此,如果记录字段如果附加了警告,它将无法解决,警告地图将不包括它。此提交通过使用“lookupOccEnv_WithFields”修复`而不是。
所有差异现在都归结为声明在hi-haddock中从TyThings中具体化。表面语法现在对文档。
链接到数据。用元组代替GHC。塔普。Prim公司
*添加--trace-args标志,用于跟踪接收到标准输出的参数*避免由于优化标志的更改而重新编译*更新用户指南和更改.md
由于hi-haddock的不稳定性,此部分有点像WIP以及缺乏支持它的工具,但这是一个良好的开端。
@芬利·麦克尔瓦恩 芬利·麦克尔瓦恩更改了标题ghc 9.6的hi-haddock 草稿:用于ghc 9.6的hi-haddock 2023年6月6日
@芬利·麦克尔瓦恩
复制链接
合作者 作者

@克莱杜科斯如果我能做些什么让这篇文章更容易复习,请告诉我。我认为我们不需要担心https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10249#note_491390。我无法复制它们。以下是我看到的性能结果:

基线测试公制值新值更改--------------------------------------------------------------------------黑线鳕鱼。电缆(正常)运行/分配23567939952 24685266616+4.7%haddock.base(正常)run/alloc 44852672216 46898560216+4.6%haddock.compiler(normal)运行/alloc 191419016712 192057742680+0.3%

其中基线是ghc-9.6型分支(在GHC repo中,而不是Haddock),并且测试的分支将此工作包含在Haddock子模块中。

文档中讨论的避免重新编译取决于本GHC MR,所以我将把它标记为草稿,直到这些更改被合并和后端口。如果那样的话,我会打电话给你🙂

@克莱杜科斯
复制链接
成员

@芬利·麦克尔瓦恩谢谢你做这项工作。:)

由于hi-haddock的不稳定性,此部分有点像WIP以及缺乏支持它的工具,但这是一个良好的开端。
@芬利·麦克尔瓦恩 芬利·麦克韦恩更改了标题草稿:用于ghc 9.6的hi-haddock ghc 9.6的hi-haddock 2023年6月8日
@芬利·麦克尔瓦恩
复制链接
合作者 作者

芬利·麦克尔瓦恩 评论2023年6月8日

@克莱杜科斯中的重新编译避免部分调用.rst现在是准确的,并且此PR已准备好合并。谢谢!

免费注册 在GitHub上订阅此对话.已经有帐户了吗?登录.
标签
还没有
项目
还没有
开发

成功合并此请求可能会解决这些问题。

2名参与者