平台新闻:2023 年 10 月
欢迎来到 OCaml 平台新闻简报的第七期!
在本期 10 月刊中,我们为您带来 OCaml 平台的最新消息,延续我们以往的传统,重点介绍最近的发展,如您在 往期 中看到的那样。要了解我们未来的方向,尤其是关于开发工作流程和用户体验改进方面,请查看我们的 路线图.
亮点
- OCaml 平台的三年路线图已正式通过!我们很高兴拥有一个社区驱动的路线图来改进 OCaml 开发人员体验,并非常感谢社区的宝贵反馈。请查看 公告.
- 在 征求社区反馈意见 并进行反对后,我们 已弃用 ocaml-migrate-parsetree(又名 OMP)。它已被 Ppxlib 取代。
- 我们正在推出新闻简报的新格式。请告诉我们您的想法,以及我们如何才能让它更适合您!
版本
W4)
[Dune] 在 Dune 中探索包管理 (贡献者:@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 - 与往常一样,我们修复了许多阻止您正常包构建的错误。
- 需要为构建规则复制沙箱。 -- ocaml/dune#8923
- 尊重 opam 包中的 [flags] 字段。 -- ocaml/dune#9047
- 改进无效替换错误。 -- ocaml/dune#8922
- 正确验证压缩包校验和。 -- ocaml/dune#8876
- 改进转换错误的位置。 -- ocaml/dune#8828
- 删除后依赖项。 -- ocaml/dune#8834
- 将求解器环境打印移动到单独的命令中。 -- ocaml/dune#8819
- 在
dune-package
中记录已安装目录。 -- ocaml/dune#8953
W5)
[opam] opam 2.2 中对 Windows 的原生支持 (贡献者:@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 上可用。
活动
- 主要集中在
setenv
和build-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 构建了一个默认的客户端搜索引擎。
活动
- 我们已合并了添加 新搜索功能 的 PR!:tada: 这将在即将发布的
odoc
2.4.0 版本中提供。 - 我们目前正在尝试基于 Sherlodoc 构建
odoc
搜索引擎。 --art-w/sherlodoc#4.
odoc
] odoc
中的图像和资产语法 (W25)
[贡献者:@panglesd (Tarides), @jonludlam (Tarides), @dbuenzli, @gpetiot (Tarides)
原因:允许包作者编写丰富的文档,使其更有用,并通过为 OCaml 包提供高质量的文档生态系统来改善 OCaml 开发人员体验。
内容:我们正在添加对资产和新语法支持,以嵌入媒体(图像、音频和视频)。
活动
- 我们决定稍微重新设计一下资产支持,使其更符合其他元素的处理方式,例如模块、类型和值。目的是确保代码在长期维护方面保持简单易懂。 -- ocaml/odoc#1002
- 我们继续审查 PR,添加对媒体的语法支持。关于缺少资产,有一些不错的讨论,一旦资产 PR 合并,就可以开始使用它了。 -- ocaml/odoc#1005
W25)
[Dune] 使用 Dune 生成依赖项文档 (贡献者:@jonludlam (Tarides)
原因:通过允许用户从其包文档导航到其依赖项的文档,使本地生成的文档更有用。目前,用户可以使用 odig
,它提供了类似的工作流程。我们正在 Dune 中直接添加对它的支持。
内容:我们正在为 odoc
编写新的 Dune 规则,这些规则 (1) 使用新的 odoc
CLI 来提高性能和缓存机会,以及 (2) 生成切换中每个 opam 包的文档,允许用户从其本地文档导航到其依赖项的文档。
活动
- 在收到来自 @alizter 和 @rgrinberg 的反馈后,对新的 Dune 规则进行了重新设计,改善了以下几个方面:更好地支持多个
findlib
目录;更好地支持系统切换;以及更稳健的从findlib
路径到本地路径的转换方法。 -- ocaml/dune#8803
W19)
[Merlin] Merlin 中对项目范围引用的支持 (贡献者:@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
W19)
[Merlin] 提高 Merlin 的性能 (贡献者:@pitag (Tarides), @Engil (Tarides), @3Rafal (Tarides)
原因:一些 Merlin 查询已被证明在大代码库中扩展性不佳,这使得编辑器体验不尽如人意,用户报告说有时他们必须等待几秒钟才能获得 Merlin 的答案。这显然是一个重大问题,会损害开发人员体验,因此我们正在努力改善 Merlin 在性能不足时的表现。
内容:我们正在构建基准测试和模糊测试 CI,以持续对 Merlin 进行基准测试和测试。我们正在解决从 Merlin 的概要分析和分析基准测试结果中发现的性能瓶颈。
活动
- 我们继续在 Merlin 上进行模糊测试 CI 的工作。我们的第一个方法是将测试数据与 Merlin 提交历史同步。但是,这意味着在比较 PR 与其基分支之间的数据,生成和持久化新数据以及批准更改时要处理各种数据竞争。为了避免这种情况,我们在 10 月尝试了一种更简单的方法,该方法为每次 CI 运行重新生成数据,而不会影响 CI 运行时间。新方法看起来很有希望。
- 我们还重新开始研究 Merlin 的性能改进。我们计划通过(选择性)尝试不同的
cmi-cache
和cmt-cache
生命周期来优化 Merlin 的时空权衡。为此,我们正在向其遥测添加有关 Merlin 内存使用情况的信息。此外,我们还研究了细化类型器缓存粒度,并分析了它的挑战。