平台通讯:2024年3月-5月

欢迎阅读第十一期OCaml平台通讯!

在本期2024年3月-5月通讯中,我们很高兴为您带来OCaml平台的最新信息,延续我们一贯的传统,重点介绍往期通讯中看到的最新进展。要了解我们前进的方向,特别是在开发工作流程和用户体验改进方面,请查看我们的路线图

亮点

  • Dune包管理的探索已达到最小可行产品(MVP)阶段:一个版本的Dune可以构建像OCaml.orgBonsai这样非平凡的项目。有了可运行的MVP,团队正在将重点转移到将Dune包管理交到社区手中。为此,我们启动了Dune开发者预览计划,我们将与用户一起测试Dune包管理,并在准备最终发布时改进用户体验。
  • opam团队发布了opam 2.2的第二个测试版,并借此打开了最终PR,以便为opam-repository添加对Windows OCaml的支持。一旦PR合并,opam 2.2就可以与Windows上的上游opam-repository一起使用,这为很快发布第三个测试版以及随后的候选版本铺平了道路。
  • odoc团队已经完成了Odoc 3.0的初始设计,并开启了多个RFC以收集社区的意见。我们已经实现了一个遵循Odoc 3.0设计的新的Odoc驱动程序,并且已经开始对设计的关键部分进行原型设计。
  • Merlin的项目范围引用查询即将发布。必要的编译器PR已合并并包含在OCaml 5.2中,而Dune规则PR已合并并包含在Dune 3.16中。接下来的步骤是将Merlin中的PR本身以及OCaml LSP中的一个小补丁合并。
  • ppx_deriving.std(即[@@deriving show, make, ord, eq, ...])一起提供的标准派生器集合以及ppx_deriving_yojson现在直接针对Ppxlib的API编写。这从两个方面影响了开发者。首先,它允许您在包含这些派生器的项目中享受可靠的编辑器功能(Ppxlib保留了Merlin的位置不变性)。其次,您可以通过在这些派生器上使用Ppxlib的deriving_inline特性来避免对这些派生器的硬依赖。非常感谢@sim642的所有工作以及非常友善的耐心,@NathanReb的审查和发布管理,以及所有其他参与者!

发布

[Dune] 在Dune中探索包管理 (W4)

贡献者:@rgrinberg (Tarides), @Leonidas-from-XIV (Tarides), @gridbugs (Tarides), @Alizter

原因:将OCaml工具统一到单个命令行下,用于所有开发工作流程。这解决了社区报告的最重要痛点之一。

内容:使用opam作为库,对将包管理集成到Dune中进行原型设计。我们引入了dune pkg lock命令来生成锁文件,并增强了dune build以处理锁文件中的依赖项。更多详细信息请参见Dune RFC

总结

在过去的三个月里,在添加Dune对包管理的支持方面取得了重大进展。我们很高兴地报告,我们的原型已达到最小可行产品(MVP)阶段:一个实验性的Dune包管理版本,可用于构建非平凡的项目,包括OCaml.org和Bonsai,我们在测试中使用了这两个项目。

还有很长的路要走,但随着这一里程碑的达成,我们现在正将重点从原型设计转移到将功能交付给社区。我们正在转向与用户一起测试新的Dune功能,特别是现在我们已经很好地理解了技术障碍及其解决方法,我们将专注于验证和改进Dune包管理的开发者体验(DX),以准备首次发布。

为此,Dune团队启动了Dune开发者预览计划。我们目前正在与选定的测试人员一起测试包管理的开发者预览版,一旦解决最大问题,我们将将其开放给更广泛的社区。

活动

[opam] opam 2.2中的Windows原生支持 (W5)

贡献者:@rjbou (OCamlPro), @kit-ty-kate (Ahrefs), @dra27 (Tarides), @AltGr (OCamlPro)

原因:通过集成原生的opam和opam-repository支持来增强OCaml在Windows上的可行性,培养更大的社区,并提供更多Windows友好的包。

内容:发布具有原生Windows支持的opam 2.2,使官方的opam-repository能够在Windows平台上使用。

总结

opam团队正在接近发布最终版本的opam 2.2,该版本支持Windows。在过去的几个月中,我们发布了opam 2.2的第二个测试版,解决了用户在先前版本中报告的一些问题,包括Windows问题。

令人兴奋的是,我们还打开了最终PR,将对Windows OCaml的支持添加到opam-repository中。随着PR的合并,opam团队预计能够在6月份转向发布候选版本。

敬请关注未来几周和几个月内更多激动人心的新闻和发布!

活动

[odoc] Odoc 3.0:统一 OCaml.org 和本地包文档 (W25)

贡献者:@jonludlam (Tarides),@julow (Tarides),@panglesd (Tarides),Luke Maurer (Jane Street)

原因:改进本地文档生成工作流程将有助于包作者为其包编写更好的文档,合并不同的 odoc 文档生成器将有助于使 odoc 的持续改进惠及更多用户。

内容:我们将创建驱动程序必须遵循的约定,以确保其输出功能正常。建立后,我们将更新 Dune 规则以遵循这些规则,访问新的 odoc 功能(例如,源代码渲染),并提供与 docs.ocaml.org 相似的功能(例如导航侧边栏)。这将有效地使 Dune 可用于生成 OCaml.org 包文档。

总结

Odoc 团队在即将推出的 Odoc 3.0 上取得了重大进展。我们在巴黎举行了富有成效的面对面会议,讨论了 CLI、源代码渲染和引用等关键设计方面。这些讨论导致发布了设计规范各个组件的 RFC。

我们还开始实现一个新的 Odoc 驱动程序,该驱动程序符合新设计以进行测试,并开始对几个新功能进行原型设计。

虽然关于 RFC 和特定功能的讨论仍在继续,但我们非常高兴能够有一套可靠的设计规范供社区审查,并开始实施新设计的主要部分。

活动

[Merlin] 在 Merlin 中支持项目范围的引用 (W19)

贡献者:@vds (Tarides),@Ekdohibs (OCamlPro),@Octachron (INRIA),@gasche (INRIA),@emillon (Tarides),@rgrinberg (Jane Street),@Julow (Tarides)

原因:通过提供项目范围的引用编辑器功能来增强开发人员的代码导航和重构,使 OCaml 与其他语言中的编辑器体验保持一致。

内容:引入 ocamlmerlin server occurrences 和 LSP textDocument/references 支持,扩展编译器的 Shapes 以用于全局出现,并在 Dune、Merlin 和 OCaml LSP 中集成这些功能。

总结

在过去的几个月里,Merlin 的项目范围引用查询的发布取得了长足的进步:编译器 PR 已合并并包含在现已发布的 OCaml 5.2 中;Dune 规则 PR 已合并,并因此对索引工具进行了重大性能改进。最终的 PR 在 Merlin 中处于开放和审查状态。该 PR 以及支持该功能的小型 LSP 补丁即将合并。

Merlin 上的 PR 还为 Emacs 的 Merlin 服务器插件添加了对该功能的支持。对 Vim 的 Merlin 服务器插件的支持已单独添加。所有基于 LSP 的编辑器插件都将自动支持新功能。

活动

  • 我们跟进了我们的编译器 PR 以提高形状别名弱化简的性能。它已合并,并已包含在 OCaml 5.2.0 中。 – ocaml/ocaml#13001
  • 我们改进了驱动索引器的 Dune 规则:简化了规则,添加了基准测试,讨论并改进了性能。该 PR 已合并,并已包含在 Dune 3.16 中。 - ocaml/dune#10422
  • 我们完善了索引器 ocaml-index:对其进行了分析,并将速度提高了约 2 倍,并改进了其 CLI。
  • 我们在基于 Merlin 服务器的 Vim 插件中添加了 :MerlinOccurrencesProjectWide 命令 - ocaml/merlin#1767