平台新闻:2023 年 10 月

欢迎来到 OCaml 平台新闻简报的第七期!

在本期 10 月刊中,我们为您带来 OCaml 平台的最新消息,延续我们以往的传统,重点介绍最近的发展,如您在 往期 中看到的那样。要了解我们未来的方向,尤其是关于开发工作流程和用户体验改进方面,请查看我们的 路线图.

亮点

  • OCaml 平台的三年路线图已正式通过!我们很高兴拥有一个社区驱动的路线图来改进 OCaml 开发人员体验,并非常感谢社区的宝贵反馈。请查看 公告.
  • 征求社区反馈意见 并进行反对后,我们 已弃用 ocaml-migrate-parsetree(又名 OMP)。它已被 Ppxlib 取代。
  • 我们正在推出新闻简报的新格式。请告诉我们您的想法,以及我们如何才能让它更适合您!

版本

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

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

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

内容:通过将 opam 用作库,将包管理集成到 Dune 中的原型设计。我们添加了一个新的 dune pkg lock 命令来生成锁定文件,并扩展了 dune build 以支持下载和构建锁定文件中指定的依赖项。阅读 Dune RFC 以了解更多详细信息。

活动

  • 我们重新设计了 opam 存储库的存储。我们现在支持多个存储库,并以高效的方式存储和更新它们。 -- ocaml/dune#8950
  • 我们引入了 $ dune pkg outdated 命令来查看锁定目录中所有过时的包。 -- ocaml/dune#8773
  • 我们引入了 $ dune describe pkg lock 来打印锁定目录。这为用户提供了锁定目录构建计划中可用内容的清晰概览。 -- ocaml/dune#8841
  • 我们在 lockdir 中添加了对求解器变量的支持,以确保 opam 变量在构建和安装时也可用。 -- ocaml/dune#8973
  • 我们成功地为 cmdliner 在 Windows 上生成了锁定文件!:windows: 接下来,我们正在努力使构建也能够在 Windows 上正常运行。 -- ocaml/dune#9048
  • 与往常一样,我们修复了许多阻止您正常包构建的错误。

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

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

原因:Opam 和 opam-repository 目前不支持 Windows 原生环境。这实际上使 OCaml 在 Windows 上成为一个非常利基的候选方案,因为用户要么 (1) 不使用包管理器,要么 (2) 使用 opam 的分支和 opam-repository。使 opam 和 opam-repository 与 Windows 兼容将使 OCaml 成为 Windows 用户的更好选择,并帮助我们壮大社区。更多能够使用 opam 的 Windows 用户最终会导致更多贡献者、更多测试、更多 Windows 友好包和更多包。

内容:发布 opam 2.2,其中包含对 Windows 的原生支持,并使官方 opam-repository 在 Windows 上可用。

活动

  • 主要集中在 setenvbuild-env 环境变量更新处理方面,这些更新适用于 Windows。 - ocaml/opam#5636

[odoc]odoc 添加搜索功能 (W25)

贡献者:@panglesd (Tarides), @EmileTrotignon (Tarides), @julow (Tarides), @jonludlam (Tarides)

原因:OCaml.org 的中央包文档中添加的包内搜索功能受到了社区的高度赞赏,并改善了用户浏览和发现 OCaml 文档的方式。我们正在将其上游到 odoc,将其引入本地文档中,并提供更多高级功能,例如按类型搜索。

内容:我们在 odoc 中添加了对插件搜索引擎的支持!odoc 提供 UI(搜索栏)并将生成搜索索引(也可以用于集成到其他搜索引擎中,如 Elasticsearch)。我们还基于 Sherlodoc 构建了一个默认的客户端搜索引擎。

活动

[odoc] odoc 中的图像和资产语法 (W25)

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

原因:允许包作者编写丰富的文档,使其更有用,并通过为 OCaml 包提供高质量的文档生态系统来改善 OCaml 开发人员体验。

内容:我们正在添加对资产和新语法支持,以嵌入媒体(图像、音频和视频)。

活动

  • 我们决定稍微重新设计一下资产支持,使其更符合其他元素的处理方式,例如模块、类型和值。目的是确保代码在长期维护方面保持简单易懂。 -- ocaml/odoc#1002
  • 我们继续审查 PR,添加对媒体的语法支持。关于缺少资产,有一些不错的讨论,一旦资产 PR 合并,就可以开始使用它了。 -- ocaml/odoc#1005

[Dune] 使用 Dune 生成依赖项文档 (W25)

贡献者:@jonludlam (Tarides)

原因:通过允许用户从其包文档导航到其依赖项的文档,使本地生成的文档更有用。目前,用户可以使用 odig,它提供了类似的工作流程。我们正在 Dune 中直接添加对它的支持。

内容:我们正在为 odoc 编写新的 Dune 规则,这些规则 (1) 使用新的 odoc CLI 来提高性能和缓存机会,以及 (2) 生成切换中每个 opam 包的文档,允许用户从其本地文档导航到其依赖项的文档。

活动

  • 在收到来自 @alizter 和 @rgrinberg 的反馈后,对新的 Dune 规则进行了重新设计,改善了以下几个方面:更好地支持多个 findlib 目录;更好地支持系统切换;以及更稳健的从 findlib 路径到本地路径的转换方法。 -- ocaml/dune#8803

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

贡献者:@voodoos (Tarides), @trefis (Tarides), @Ekdohibs (OCamlPro), @gasche (INRIA)

原因:项目范围引用作为编辑器功能,是开发人员浏览和更好地理解其代码库的绝佳方式。它也是用户从其他生态系统中期望拥有的功能,因此在 Merlin 和 OCaml LSP 中对它的支持将同时改善 OCaml 编辑器体验,并使其与其他语言相媲美。

内容:我们正在添加一个新的 merlin single occurrences 命令,并支持 LSP textDocument/references 请求。为此,我们正在扩展编译器的 Shapes 以支持全局出现,构建一个生成代码库中标识符索引的工具,并在 Dune、Merlin 和 OCaml LSP 中添加对它的支持。

活动

  • 我们继续致力于项目范围出现量的编译器 PR,特别是添加了对内联记录标签的支持。该 PR 现在已准备好进行下一轮审查。 -- ocaml/ocaml#12508
  • 同时,我们继续致力于提供出现量的工具。我们仍在计划在年底之前发布基于 4.14 的编译器实验版本,以在正式发布之前收集对该功能的反馈意见。我们目前的目的是在 OCaml 5.2 中提供官方的项目范围出现量支持。 -- voodoos/merlin#8, voodoos/ocaml-lsp#2, voodoos/dune#2, ocaml-index#5

[Merlin] 提高 Merlin 的性能 (W19)

贡献者:@pitag (Tarides), @Engil (Tarides), @3Rafal (Tarides)

原因:一些 Merlin 查询已被证明在大代码库中扩展性不佳,这使得编辑器体验不尽如人意,用户报告说有时他们必须等待几秒钟才能获得 Merlin 的答案。这显然是一个重大问题,会损害开发人员体验,因此我们正在努力改善 Merlin 在性能不足时的表现。

内容:我们正在构建基准测试和模糊测试 CI,以持续对 Merlin 进行基准测试和测试。我们正在解决从 Merlin 的概要分析和分析基准测试结果中发现的性能瓶颈。

活动

  • 我们继续在 Merlin 上进行模糊测试 CI 的工作。我们的第一个方法是将测试数据与 Merlin 提交历史同步。但是,这意味着在比较 PR 与其基分支之间的​​数据,生成和持久化新数据以及批准更改时要处理各种数据竞争。为了避免这种情况,我们在 10 月尝试了一种更简单的方法,该方法为每次 CI 运行重新生成数据,而不会影响 CI 运行时间。新方法看起来很有希望。
  • 我们还重新开始研究 Merlin 的性能改进。我们计划通过(选择性)尝试不同的 cmi-cachecmt-cache 生命周期来优化 Merlin 的时空权衡。为此,我们正在向其遥测添加有关 Merlin 内存使用情况的信息。此外,我们还研究了细化类型器缓存粒度,并分析了它的挑战