平台简讯:2023 年 7 月
欢迎阅读 OCaml 平台简讯的第四期!
本期简讯介绍了 7 月份为改进 OCaml 开发者体验而在 OCaml 平台 上做出的最新改进。与 之前的更新 一样,本期简讯重点介绍了当前正在探索或改进的开发工作流程。
由于欧洲正值夏季,本期简讯的篇幅比以往略短。不过,本月在 Dune 中对包管理的支持方面取得了一些重大进展,只剩下几个 剩余的障碍 就可以构建简单的 opam 包了。我们还看到了备受期待的 opam 2.2 的第二个 Alpha 版本的发布,该版本在 Windows 上提供了自动安装 Cygwin 的功能,允许用户仅使用 opam 的安装脚本即可安装完整的开发环境!
发布
以下是本月发布的所有新版平台工具。查看 OCaml 更新日志 以阅读发布公告!
构建包
[Dune] 探索 Dune 中的包管理
贡献者:@rgrinberg (Tarides)、@Leonidas-from-XIV (Tarides)、@gridbugs (Tarides)、@kit-ty-kate (Tarides)
7 月份,Dune 包管理团队致力于自动下载 opam-repository
,以确保在未指定其他 opam-repository
源时能够随时用于锁定。
实现了 Dune 版本的 opam substs
支持,并在求解器中扩展 opam 包过滤器时增强了变量环境。
还添加了对系统变量的支持,这些变量可以从工作区文件读取或从当前系统推断。值得注意的是,未设置的系统变量现在被求解器视为通配符,从而允许生成适用于一系列系统的单个 lockdir
。此更改消除了对不同系统(如 macOS 和 Linux)使用不同 lockdirs
的需求。
活动
- 添加字段以指示 OCaml 包 - ocaml/dune#8079
- 创建问题以跟踪在 Dune 中构建 opam 包的剩余工作,以及 元问题
- 修补
lockdir
中的文件 - ocaml/dune#8093 - 使用 Dune 构建包时进行 Opam 变量插值 - ocaml/dune#8094
lockdir
中来自opam-repository
的每个包文件 - ocaml/dune#8095- Dune
lockdir
中的 Opambuild
和install
命令 - ocaml/dune#8154
- 修补
lockdir
中的条件依赖项 - ocaml/dune#8050- 一系列准备合并到新 PR 中的提交,这将扩展此功能以允许用户在构建上下文中对系统
env vars
设置约束,并一次性解决一系列系统。例如,这可以用于生成一个在 macOS 和 Linux 上都能工作的lockdir
,或者在 Linux 机器上生成一个用于 macOS 的lockdir
。
- 一系列准备合并到新 PR 中的提交,这将扩展此功能以允许用户在构建上下文中对系统
- 求解器可以在单个
lockdir
中解决多个环境 - ocaml/dune#8188- 这将允许用户在多个不同的环境(例如,不同的操作系统)中使用单个
lockdir
。
- 这将允许用户在多个不同的环境(例如,不同的操作系统)中使用单个
- 实现
opam-repository
的自动下载,并可以选择使用现有文件夹或自定义默认 URL(默认为opam-repository
tarball),从而无需依赖于切换的opam-repository
并取消对它的支持,从而在一定程度上简化了0install
求解器运行的方式 - ocaml/dune#8105 - 通过将 opam API 中的函数与 Dune 规则挂钩,致力于实现 opam 的替换支持作为 Dune 的一部分 - ocaml/dune#8225
- 创建来自
.in
模板的文件以匹配 opamsubsts
字段/特性 - ocaml/dune#8225 - 在创建用于包求解的变量环境方面取得了进展
- 在求解过程中设置
opam-version
变量 - ocaml/dune#8267 - 在求解时不要警告未定义的 opam 变量 - ocaml/dune#8275
- 在求解过程中设置
[opam] opam 2.2 中对 Windows 的原生支持
贡献者:@rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@AltGr (OCamlPro)
上个月发布了备受期待的 opam 2.2 的第一个 Alpha 版本。本月发布了 opam 2.2 的第二个 Alpha 版本。
虽然第一个 Alpha 版本引入了 Windows 原生兼容性,但第二个 Alpha 版本为 Windows 提供了更简单的初始化,消除了对预先存在的 Cygwin 类 Unix 环境的依赖。相反,opam 现在在初始化期间提供了一个嵌入式、完全托管的 Cygwin 安装。
查看 发布公告 以了解更多详细信息,并加入讨论以分享您对 讨论 的反馈。
活动
- 使
opam init
在内部自动安装 Cygwin,而不是要求用户手动安装 - opam#5545
dune monitor
:连接到正在运行的 Dune 构建
[Dune] 贡献者:@Alizter
本月,@Alizter 开始开发一个新的 dune monitor
命令,该命令连接到以监视模式运行的 Dune 构建(通过 Dune RPC),并表现得好像您执行了 dune build -w
一样。
将来,计划将 dune monitor
合并到 dune build
命令中,因此运行构建将默认生成一个 RPC 服务器,任何后续构建都将连接到 RPC 服务器以显示构建信息。
这在 Dune 包管理的背景下尤其令人兴奋。编辑器将能够连接到正在运行的 Dune RPC 服务器(直接或通过 OCaml LSP)以提供相关的编辑器功能。使用 dune monitor
,您可以在同一项目中打开的编辑器数量将不受限制!
结合最近对 Dune 终端 UI 的工作,预计在不久的将来运行多个构建命令的体验将得到极大的改善!
生成文档
odoc
添加搜索功能
[odoc] 为 贡献者:@panglesd (Tarides)、@EmileTrotignon (Tarides)、@trefis (Tarides)
odoc
团队继续在从 odoc 生成搜索索引以及向 HTML 后端添加搜索功能方面取得进展。
在测试过程中发现了一些问题并已解决,并且 Sherlodoc 已更新为与最新版本的 odoc
兼容,后者现在提供了 对资源的基本支持,用于选择搜索 JavaScript 脚本文件。
活动
odoc
中的搜索支持 - ocaml/odoc#972- 收集出现信息 - ocaml/odoc#976
odoc
中的图像和资源语法
[odoc] 贡献者:@panglesd (Tarides)
作为使 odoc
适用于创建丰富手册的工作的一部分,odoc
团队开始着手添加对图像和资源的特殊支持!这项工作将为 OCaml.org 的中央包文档带来图像支持。
在接下来的几周内,将在 7 月份发布的 RFC 中讨论语法和设计,一旦设计达成共识,就会开始实施。
活动
- 实现了资源引用(在引用中使用
asset-*
限定符),以及它们的解析(参见 分支)。 - 创建了一个问题来讨论图像的语法,并提出了初步建议。 - ocaml/odoc#985
编辑和重构代码
[Merlin] Merlin 中对项目范围引用的支持
贡献者:@voodoos (Tarides)、@let-def (Tarides)
本月,项目范围引用的工作重点是改进别名处理、修复与 UID 相关的问题以及增强模块和构造函数的行为。
现在每个 Merlin 测试都通过了(:tada:!),因此团队打算专注于将编译器补丁上游,这将反过来解锁其余堆栈(即 Merlin、Dune 和 OCaml LSP)的上游。
活动
- 编译器对项目范围出现情况的支持 - voodoos/ocaml#1
- 使用 CMT 文件中的新编译信息来构建和聚合索引 - voodoos/ocaml-uideps#5
- Dune 协调索引生成 - voodoos/dune#1
- 使用新的 CMT 信息为项目范围的出现情况提供缓冲区出现情况和索引 - voodoos/merlin#7
- 在
ocaml-lsp
中支持项目范围的出现情况 - voodoos/ocaml-lsp#1
[Merlin] 提升 Merlin 的性能
贡献者:@pitag-ha (Tarides)、@3Rafal (Tarides)、@voodoos (Tarides)、@let-def (Tarides)
上个月,我们报告了将 持续基准测试 Merlin 的 PR 合并。下一阶段涉及实现模糊测试 PR 以监视行为回归。7 月份,引入了 此行为回归 CI 的 RFC,以及初始实现,以讨论设计的权衡取舍。
合并后,Merlin 的 CI 系统的基础工作将完成,Merlin 团队打算将重点转移到性能优化上。
活动
- 为行为 CI 创建了 RFC - ocaml/merlin#1657
- 改进了
merl-an
中的错误发现 - pitag-ha/merl-an#33 - 改进了
merl-an
以用于行为 CI- 向类型封闭命令添加
-index 0
- pitag-ha/merl-an#30 - 从定位命令中删除
-index 0
- pitag-ha/merl-an#31 - 改进 [行为] 命令 -- pitag-ha/merl-an#34
- 行为命令 cat 数据 -- pitag-ha/merl-an#37
- 仅允许一个 Merlin 版本 -- pitag-ha/merl-an#40
- 提升性能 -- pitag-ha/merl-an#41
- 向类型封闭命令添加