平台简讯:2024年1月

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

在本期 2024 年 1 月的简讯中,我们很高兴为您带来 OCaml 平台的最新动态,延续我们一贯的传统,重点介绍最近的发展,如 往期简讯 中所述。要了解我们的发展方向,尤其是在开发工作流程和用户体验改进方面,请查看我们的 路线图

亮点

  • 期待已久的 Merlin 项目级引用预览版本现已推出。阅读更多内容,请访问 公告
  • opam 2.2 的第一个 Beta 版本 已发布!请尝试使用它,如果您在 Windows 上使用 opam 遇到任何问题,请告知 opam 团队。
  • odoc 团队开始努力将 OCaml.org 包文档与 Dune 提供的本地工作流程统一起来。这非常令人兴奋,因为结果应该是 Dune 拥有一个大大改进的本地文档,并且 OCaml.org 上的 odoc 功能可以更快地发布。他们正处于项目的初始阶段,敬请关注未来几个月带来的激动人心的消息!

发布版本

[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 的 pin-depends 字段 -- https://github.com/ocaml/dune/pull/9685
  • 为使用开发源代码的包正确设置 %{pkg:dev} -- https://github.com/ocaml/dune/pull/9605
  • 删除 Repository_id 重构,现在改为使用 Git URL 指定修订版本 -- https://github.com/ocaml/dune/pull/9614
  • 删除 --skip-update 并尽可能自动推断脱机模式 -- https://github.com/ocaml/dune/pull/9683
  • 支持存储库中的子模块 -- https://github.com/ocaml/dune/pull/9798
  • 在构建期间不要多次下载相同的包源归档文件。许多 OCaml 包位于 Git 存储库(和源归档文件)中,其中包含其他几个相关包,并且一个项目通常依赖于来自同一存储库的几个包。如果没有此更改,则对于出现在项目依赖项中的来自该存储库的每个包,都会下载该存储库的源归档文件一次 -- https://github.com/ocaml/dune/pull/9771
  • 添加用于选择 lockdirs 的 cond 语句。这允许根据当前系统的属性(例如,操作系统、体系结构)来选择 lockdir,这将简化处理具有系统特定依赖项的项目。 -- https://github.com/ocaml/dune/pull/9750

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

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

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

内容:发布带有原生 Windows 支持的 opam 2.2,使官方 opam-repository 可用于 Windows 平台。

活动

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

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

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

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

活动

  • 我们首先比较了各种驱动程序、它们的需要和约束,并详细说明了约定可能是什么样子。在开始实施工作之前,我们将发布 RFC,以确保我们确实理解了每个人的需求。

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

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

原因:通过提供高级搜索选项(如基于类型的查询),提高 OCaml 包文档(本地和 OCaml.org 上)的可用性和可导航性。

内容:odoc 中实现搜索引擎接口,包括 UI 和搜索索引。此外,我们正在开发一个基于 Sherlodoc 的默认客户端搜索引擎。

活动

  • 我们在 1 月份继续开发 Sherlodoc,并且 几个星期前发布了新版本,现在可以嵌入到 odoc 生成的文档站点上。
  • 我们还完成了更新驱动 odoc 的 Dune 规则,以便在本地构建的文档上启用新的搜索功能。这些更改作为 Dune 3.14.0 的一部分发布。 -- ocaml/dune#9772

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

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

原因:通过允许直接将多媒体元素集成到 OCaml 包文档中,使包作者能够创建丰富、引人入胜的文档。

内容:我们正在引入新的语法和支持,用于在 odoc 环境中嵌入媒体(图像、音频、视频)和处理资源。

活动

  • PR 仍在积极审查中,我们正在解决最后一些小问题。 -- ocaml/odoc#1002

[odoc] 提升 odoc 性能 (W25)

贡献者:@jonludlam (Tarides), @julow (Tarides), @gpetiot (Tarides)

原因:解决 odoc 中的性能问题,尤其是针对大规模文档,以提高效率和用户体验,并在大型代码库中解锁本地文档生成。

内容:分析 odoc 以识别主要的性能瓶颈,并根据分析和基准测试结果对 odoc 进行优化。

活动

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

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

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

内容:引入 merlin single occurrences 和 LSP textDocument/references 支持,扩展编译器的 Shapes 以实现全局出现,并将这些功能集成到 Dune、Merlin 和 OCaml LSP 中。

活动

[Merlin] 提升 Merlin 性能 (W19)

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

原因:一些 Merlin 查询已显示出在大规模代码库中扩展性不佳,导致编辑器体验不佳。用户报告说,他们有时必须等待几秒钟才能获得答案。这显然是一个严重的问题,会影响开发人员体验,因此我们正在努力提升 Merlin 在性能不足时的表现。

内容:开发基准测试工具,并通过基于分析和基准测试结果的针对性改进优化 Merlin 的性能。

活动

  • 我们合并了模糊测试 CI。提醒一下,此 CI 会测试 Merlin PR 以检测行为回归。这将帮助我们确保不会通过在广泛的用例上测试它们来无意中破坏 Merlin 查询 - ocaml/merlin#1716

  • merlin-lib中,我们开始编写一个原型,用于并行处理缓冲区和查询计算。并行性指的是 OCaml 5 的并行性(域)。