平台新闻:2023 年 9 月

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

深入了解 9 月份的最新更新,并发现 OCaml 平台 是如何发展的。就像在 之前的新闻简报 中一样,它重点介绍了 OCaml 开发工作流程的最新进展和增强功能。

除了下面突出显示的平台团队进展更新外,请不要犹豫 分享您对即将发布的平台路线图的反馈。我们刚刚根据最新的反馈对其进行了更新,并计划在未来几周内采用它,除非社区提出新的担忧。

祝您阅读愉快!

发布

以下是本月发布的所有平台工具的新版本

有关详细的发布说明和公告,请浏览 OCaml 变更日志

构建包

[Dune] 探索 Dune 中的包管理

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

9 月份最值得关注的是,将编译器和库从 Dune 安装的包公开到项目其他部分的工作现已完成!这意味着现在有一个 Dune 包管理的原型,可用于构建依赖于(简单)opam 包的项目!这仍然是一个早期原型,尚未准备好供核心团队以外的人员测试,但仍然是一个重要的里程碑::tada:!

除了这项工作之外,9 月份的工作还集中在三个领域

  • 增加对 opam 功能的覆盖范围,以支持来自 opam-repository 的更多 opam 包。本月,Dune 团队增加了对新字段的支持,包括 build-envsetenvsubst,以及对修补的支持。
  • 为 Dune 配置设计和实现一个字符串操作 DSL。这将允许用户在 Dune 包锁定文件中表达与 opam 过滤器中相同的动态性,这对于将 opam buildinstall 命令转换为 Dune 表达式是必要的。
  • 开始支持自定义 opam 存储库,方法是使 dune-workspace 中的 opam-repository 可配置。下一步是尝试如何存储和访问 opam 存储库。一个想法是,所有 opam 存储库都将存储在一个修订存储中,该存储将提供所有数据。这样做的优点是增量更新很小,就像通过 Git 拉取一样。存储库不需要解压缩,因此使用的存储空间和 inode 较少。

活动

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

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

为即将发布的 opam 2.2~alpha3 做准备,工作重点是更好地处理对 setenvbuild-env opam 字段的路径重写。

建议的更改 将允许用户在 opam 文件中指定 setenv/build-env 中每个环境变量的路径分隔符和格式。这确保环境变量正确设置并可在 Windows 上使用。

PR 正在审查中,尚未准备好合并,但这是 opam 2.2~alpha3 范围内解决的最后一个问题。

活动

[Dune] Dune 终端用户界面

贡献者:@Alizter、@rgrinberg (Tarides)

继 8 月份将 Dune TUI 移植到 Nottui 的 PR 合并,以及添加了一些功能之后,@Alizter 继续通过两个 PR 来构建 Dune 的完整终端用户界面,即添加 tui 模式下的作业选项卡,以及对 多行状态行 的支持。

活动

[Dune] 对利基平台的支持

贡献者:@Alizter

Dune 现在可以在 Haiku 和 Android(使用 Termux)上构建!这意味着现在可以在这些平台上构建和安装 OCaml 和 Dune,这将为更多本机 OCaml 开发铺平道路。

作为参考,以下是一个关于 Dune 平台支持的表格(? 表示需要进一步测试)

| 平台 | 支持 | 监视 | TUI | 缓存 | 沙盒 | |------------------|---------|-------|-----|-------|------------| | Linux | 完整 | 是 | 是 | 是 | 是 | | MacOS | 完整 | 是 | 是 | 是 | 是 | | Windows (DkML) | 完整 | 是 | 否* | 是 | 仅复制 | | Windows (MinGW) | 有限 | 是 | 是 | 是 | 是 | | Windows (Cygwin) | 有限 | 是 | 是 | 是 | 是 | | Linux (Android) | 有限 | 是 | 是 | ? | ? | | FreeBSD | 有限 | 是 | 是 | ? | ? | | NetBSD | 有限 | 是 | 是 | ? | ? | | OpenBSD | 有限 | ? | ? | ? | ? | | Haiku | 有限 | 是 | 是 | ? | ? |

如果您正在使用其中一个平台,请不要犹豫在 Dune 的错误跟踪器 上打开问题,如果您遇到任何问题!

活动

生成文档

[odoc]odoc 添加搜索功能

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

继续为 odoc 添加搜索功能,以改善文档浏览体验。

9 月份,odoc 团队继续审查 8 月份开始的各种拉取请求。同行评审建议对 CLI 和库 API 进行一些改进。

他们还通过仅在用户点击搜索栏时加载搜索脚本,在客户端方面改进了性能,并且他们在 UI 整体方面取得了相当大的进展。

活动

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

贡献者:@panglesd (Tarides)

odoc 添加对图像和资产的支持,并将图像引入 OCaml.org 包文档的努力仍在继续!

本月,@panglesd 开启了一个 PR,其中包含 资产引用的实现

媒体的具体语法经过了多次设计,尤其是媒体是块、可嵌套块还是内联元素。在本月底,@panglesd 创建了一个 PR,该 PR 基于资产引用 PR,以添加对媒体的支持。

有一段时间,没有关于如何构建 opam 安装包的文档的官方约定。随着资产添加了复杂性,现在是解决这个问题的好时机。为之开启了一个 文档 PR。感谢 @dbuenzli 的全面审查以及参与建立这些约定!

活动

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

贡献者:@jonludlam (Tarides)

目前,Dune 只知道如何构建 Dune 工作区中包的文档,这意味着您只能从 OCaml.org 包站点 阅读依赖项的文档。其他 odoc 驱动程序,如 odig,会构建切换中所有包的文档,并且一直是推荐给希望在本地阅读依赖项文档的用户使用的解决方案。

为了改善使用 Dune 的文档生成体验,@jonludlam 针对生成文档的 Dune 规则工作了一个新版本。使用这些规则,Dune 将获得额外的能力,可以构建两者的组合:一个连贯的文档集,涵盖了切换安装的库和本地库。

PR 正在审查中,并将在未来几周内合并。

对新规则的未来计划包括更好地与平台的其他部分集成、改进功能以涵盖 dune build @doc 涵盖的用例、集成源代码渲染以及集成搜索(一旦它在 odoc 中实现!)。

活动

编辑和重构代码

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

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

8 月,Merlin 团队在编译器上打开了 PR,该 PR 在 Shapes 中添加了实现项目范围引用所需的信息。

PR 收到了审查,因此团队致力于在考虑反馈的同时继续完成其余部分的工作(构建系统规则、索引器和新的定位,以及用于 Merlin 的发生源后端)。

他们还整合了发布计划和时间表。该计划是首先发布基于 4.14 的编译器实验性变体,以便在今年年底之前收集对此备受期待的功能的反馈。当前的目标是在 OCaml 5.2 中提供官方的项目范围发生源支持。

活动

[Merlin] 提高 Merlin 的性能

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

Merlin 团队继续致力于提高 Merlin 的性能。

在深入研究特定性能优化之前,他们致力于一个基准测试 CI 来捕捉性能回归并衡量改进。与此同时,他们还致力于一个模糊测试 CI 来捕捉行为回归。

在 9 月份,继模糊测试 CI 的概念验证(来自 7 月份的工作)之后,团队继续致力于解决当前 CI 实现的局限性,这些局限性会阻止它合并到 Merlin 中。具体来说,他们专注于找到一种解决方案,以一种不会使 Merlin 存储库膨胀的方式存储模糊测试结果。当前的方法是将数据存储在单独的 Git 存储库中,并在运行模糊测试 CI 时将其拉取。他们创建了一个实现此行为的 GitHub action 工作流。

接下来,该计划是在逐渐将重点转移到性能优化之前,完成 Merlin CI 的工作。

活动