平台简讯:2023年5月

欢迎阅读 OCaml 平台简讯的第二期!

我们很高兴与大家分享 5 月份在使用 OCaml 平台 改善 OCaml 开发者体验方面所做的工作。与 之前的更新 类似,本期简讯围绕我们目前正在探索或改进的开发工作流程展开。

本月的亮点是发布了 OCaml 平台的开发中路线图。我们发布它是为了开始收集社区关于平台的设计原则和人物角色的反馈。这些反馈将用于制定未来三年的计划。我们已经收到了很多非常有见地和建设性的反馈,在接下来的几周和几个月里,我们将根据这些反馈修改路线图。作为下一步,我们将分享拟议开发者工作流程的第一个版本。

本月的另一个重要里程碑是 Dune 3.8 的发布。此版本支持使用 Melange 将 OCaml 项目编译为 JavaScript,Melange 本月也发布了其 首个稳定版本!它还包含一些重要的功能和改进,这些功能和改进已经开发了一段时间,例如新的 concurrent 操作和 Coq 规则的组合。

最后一点亮点是,opam 2.2 的第一个 alpha 版本即将发布。本月在准备发布时遇到了一些意外问题,但 opam 团队仍在争取在 6 月发布。

还有很多其他非常令人兴奋的工作需要讨论,所以让我们深入了解一下!

发布

以下是 4 月份我们发布的平台工具的新版本。查看 OCaml 变更日志 以阅读公告和功能亮点!

构建包

[Dune] 探索 Dune 中的包管理

贡献者:@rgrinberg (Tarides)、@Leonidas-from-XIV (Tarides)、@gridbugs (Tarides)、@kit-ty-kate (Tarides)

继续探索向 Dune 添加包管理支持。本月在几个方面取得了进展

  • 已经开始着手进行求解器的工作,包括为生成 Dune 锁文件时解决依赖项而引入 opam-0install 求解器。在 main 分支上提供了锁文件生成的正在开发的实现。
  • 源代码树处理已经过重构,以最终允许使用多个特定于上下文的锁文件。
  • 源代码获取实现已经得到改进,包括校验和处理和更好的获取 API。这使得构建 opam 包的接口更加简洁。
  • 继续对 opam 包的构建原型进行工作,其中包括添加新的 PatchSubstitute 操作。这增加了现在可以构建的 opam 包的子集。

活动

[opam] opam 2.2 中对 Windows 的原生支持

贡献者:@rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@emillon (Tarides)、@Leonidas-from-XIV (Tarides)

整个 5 月份,opam 团队一直专注于审查和修复 2.2 alpha 版本的剩余 PR。这项工作调试并解决了测试期间发现的问题,团队现在正在处理少数等待审查的 PR。

一个新的版本,opam 2.1.5 点版本,也已经发布,从即将发布的 2.2 版本中移植了一些修复程序,以及一个重要的安全修复程序。您可以在 OCaml 变更日志 上阅读公告。

活动

[Dune] 改善 Dune 的文档

贡献者:@emillon (Tarides)

两个 Dune 库现在在 OCaml.org 上有文档页面:dune-build-infodune-configurator 现在在其包页面上直接提供了其 API 文档,并且对于 Dune 本身,已包含指向其官方文档的链接。

已向 Dune Sphinx 域添加了一个新的 action: 指令,允许进行改进的交叉引用。最后,旧的 .org 格式 Dune 示例文档已转换为 Markdown,以进一步标准化文档格式。

对文档的改进已作为 Dune 3.8 版本的一部分发布。可以在 Dune 文档 上查看新的结构和许多改进。

活动

[Dune] 组合已安装的 Coq 理论

贡献者:@Alizter 和 @ejgallego (IRIF)

上个月,将 使用 Dune 组合 Coq 理论的支持 的 PR 合并了。

这现在在 Dune 3.8.0 版本中可用!从现在开始,即使 Coq 项目依赖于使用其他构建系统的 Coq 项目,Coq 用户也可以利用 Dune 来构建 Coq 项目!

[Dune] 并发运行操作

贡献者:@Alizter 和 @hhugo (Nomadic Labs)

上个月,将几个 PR 合并到 Dune 中以 添加新的并发操作,并将其用于 并发运行内联测试

这些补丁是 Dune 3.8.0 版本的一部分,从现在开始,您可以在 Dune 规则中使用新的 concurrent 操作

(rule
 (action
  (concurrent
   (run <prog> <args>)
   (run <prog> <args>))))

[Dune] 对大型代码库进行 Dune 基准测试

贡献者:@gridbugs (Tarides)、@Leonidas-from-XIV (Tarides)

Dune 基准测试结果的质量得到了提高,通过多次运行短测试来平均化短测试中看到的差异。此增强旨在减少环境固有背景噪声的影响。

Dune 基准测试还暴露了两个损坏的包:ppx_rapper (3.1.0) 工件的哈希值已更新,因为它已就地更改,并且 ocamlcodoc 工件已添加到 opam-source-archives 中,因为原始 URL 无法访问。

此外,基准测试中发现的 dune-rpc-lwt 中的堆栈溢出问题已得到修复。

活动

  • 多次运行短的单库基准测试——ocaml/dune#7798
  • 修复了单库基准测试中的问题——ocaml/dune#7786
  • 添加 了 ocamlcodoc 到 opam-source-archives 并 更新 了 opam-repository。
  • 打开了一个关于 ppx_rapper.3.1.0 包就地更改的问题——issue

编译为 JavaScript

[Dune] 在 Dune 中使用 Melange 编译为 JavaScript

贡献者:@anmonteiro、@jchavarri (Ahrefs)、@rgrinberg (Tarides)

我们很高兴看到 Dune 3.8.0 和 Melange 1.0 本月的联合发布!

Melange 是一种从 OCaml 到 JavaScript 的编译器,其愿景是保持与 OCaml 的兼容性,并在现代 JavaScript 生态系统中提供最佳的 OCaml 体验。

请查看Dune 文档Melange 文档,了解如何开始使用 Melange 将 OCaml 项目编译成 JavaScript。

您还可以参考模板来开始。

生成文档

[Odoc]odoc 添加搜索功能

贡献者:@panglesd (Tarides),@EmileTrotignon (Tarides),@trefis (Tarides)

odoc 团队在为 odoc 生成的文档添加搜索栏方面取得了稳步进展。

5 月份,设计了一个用于 odoc 和搜索引擎之间交互的接口。Sherlodoc 现已可以在浏览器中运行,并更新为使用 odoc 公开的新的接口。还对 sherlodoc 本身进行了改进,以便能够搜索构造函数和记录字段,以及文档字符串。所有这些额外索引产生的更大的数据库促使人们开始对其进行分析并实施优化。

为了应对 6 月份的更新,可以查看几天前打开的odoc PR

同时,开发了一个计算 odoc 中出现的次数的工作原型。目的是在生成的索引中添加使用统计信息,以便搜索引擎可以使用它对搜索结果进行排序。它还将允许在 3 月份合并的渲染的源代码中使用“跳转到文档”功能。

[Odoc] 支持 odoc 中的表格

贡献者:@gpetiot (Tarides),@panglesd (Tarides),@Julow (Tarides),@jonludlam (Tarides),@trefis (Tarides)

添加对在 Odoc 中创建表格的新语法支持的 PR 已合并!

提醒一下,此新功能将允许使用类似于 Markdown 的语法创建表格。

{t
  a  | b | c | d
  ---|:--|--:|:-:
  a  | b | c | d
}

Odoc 将为不同的后端生成表格,包括 LaTex 和 HTML。此新语法将在即将发布的 Odoc 2.3.0 版本中提供。敬请期待!

活动

代码编辑和重构

[Merlin] 支持 Merlin 中的项目范围引用

贡献者:@voodoos (Tarides),@let-def (Tarides)

本月在支持 Merlin 中的项目范围出现方面进展不大,因为 Merlin 团队专注于性能改进、修复用户报告的错误、与 OCaml 5.1 的兼容性以及 Merlin 4.9 的发布。

剩余的问题,例如模块别名遍历和索引过滤,已进行了讨论,并将很快开始实施已识别的解决方案。

[Merlin] 提高 Merlin 的性能

贡献者:@pitag-ha (Tarides),@3Rafal (Tarides),@voodoos (Tarides),@let-def (Tarides)

Merlin 基准测试工作的最后阶段正在进行中,Merlin 团队专注于使用 current-bench 将开发的基准测试工具集成到 Merlin 的 CI 中。PR 已在 merl-an 上打开,以添加一个新的与 current-bench 兼容的后端,并且已开始在 Merlin 的遥测中添加内存使用信息的工作。

在性能优化方面,Merlin 中的 PPX 阶段缓存已完成并合并。已在 upstream 上提出了关于使用 Merlin 的工具如何从新的 PPX 缓存中获益的问题。

活动

  • merl-an 中实现了 current-bench 后端的草图 -- pitag-ha/merl-an#2
  • 开始在 Merlin 的遥测中添加内存使用信息的工作。
  • 完成并合并了 PPX 阶段缓存 PR -- ocaml/merlin#1584
  • duneocaml-lsp-server 中打开了问题,以记录启用 PPX 阶段缓存的必要条件。
  • 识别并修复了与 (F A).t 语法相关的内存“泄漏”,导致 memoization 表格无限制增长 -- ocaml/merlin#1609

[OCaml LSP] 在 Windows 上使用 Dune RPC

贡献者:@nojb (LexiFi)

5 月份,在Dune 3.7.0 中引入的支持 Windows 上的监视模式的基础上,在DuneOCaml LSP中合并了几个补丁,以允许 OCaml LSP 使用 Dune RPC。目的是使 Windows 用户能够利用 Dune RPC,并在 Dune 在监视模式下运行时在编辑器中接收构建状态和更详尽的构建错误。

Dune 3.8.0 随上述补丁一起发布,OCaml LSP 的版本将在未来几周内发布。

[OCaml LSP] 将 OCaml LSP 的 Merlin 分支上游

贡献者:@voodoos (Tarides),@3Rafal (Tarides)

将 OCaml LSP 的 merlin 分支上游的工作仍在继续。Merlin 中的必要补丁已审查并合并。还继续在使用 Merlin 作为 OCaml LSP 中库的 PR 上开展工作。

活动

代码格式化

[OCamlFormat] 缩小 OCamlFormat 和 ocp-indent 之间的差距

贡献者:@gpetiot (Tarides) 和 @EmileTrotignon (Tarides),@Julow (Tarides),@ceastlund (Jane Street)

继续调整 janestreet 配置文件,使其与 ocp-indent 的输出更好地对齐。尽管在格式化“cinaps”注释方面遇到了困难,但在 5 月份取得了相当大的进展,并且工作将在 6 月份继续进行。

活动