平台简讯:2023年6月

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

本期简讯介绍了 6 月份为增强 OCaml 开发者体验而对 OCaml 平台 做出的最新改进。与 之前的更新 一样,本期简讯重点介绍了当前正在探索或增强的开发工作流程。

本月最值得关注的亮点无疑是 opam 2.2 的首个 alpha 版本发布!经过多年的开发(opam 2.1 发布于近两年前),opam 团队付出的辛勤努力意义重大。我们对 opam 团队(Raja Boujbel、David Allsopp、Kate Deplaix、Louis Gesbert,在 OCamlPro/Tarides 的联合协作中)表示衷心的感谢,尤其是感谢 Raja Boujbel 为了完成这项工作并发布 alpha 版本而付出的辛勤努力。公告 中提供了更多详细信息,我们鼓励您在 讨论帖 中提供反馈。

  • 发布
  • 构建包
    • [Dune] 探索 Dune 中的包管理
    • [opam] opam 2.2 中对 Windows 的原生支持
    • [Dune] 改善 Dune 的文档
    • [Dune] 新的 dune show 命令
  • 生成文档
    • [odoc] 为 odoc 添加搜索功能
  • 编辑和重构代码
    • [Merlin] Merlin 中对项目范围引用的支持
    • [Merlin] 提升 Merlin 的性能
    • [OCaml LSP] 将 OCaml LSP 的 Merlin 分支合并到上游
    • [OCaml LSP] 提取代码操作
    • [OCaml LSP] 支持内联提示
  • 格式化代码
    • [OCamlFormat] 缩小 OCamlFormat 和 ocp-indent 之间的差距

发布

6 月份是一个繁忙的月份,总共发布了 9 个版本!其中包括 Dune 的三个补丁版本和一个次要版本,opam 2.2 的首个 alpha 版本,OCaml LSP 的两个次要版本,Ppxlib 的一个次要版本,以及 dune-release 的一个主要版本。要了解所有这些版本中包含的功能和改进,请访问 OCaml 变更日志

构建包

[Dune] 探索 Dune 中的包管理

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

本月在 Dune lockdirs 上取得了显著进展,团队即将能够锁定和构建简单的 opam 包。

改进包括

  • 求解器对 opam 标志(with-testwith-doc)的理解。
  • 每个构建上下文都有独立的 lockdirs,允许用户配置选择包版本的策略。
  • dune-workspace 文件中按上下文配置 lockdirs。
  • 改进的获取功能,可以处理 VCS 仓库和单个文件。
  • 系统变量值现在根据 opam 的方法确定。

目前正在讨论实现端到端工作流的障碍,下个月的重点将放在提高 opam 功能的覆盖率上。

活动

  • 工作区中的锁定文件配置 -- #7835
  • 对 Op 使用 Dyn.variant 构造函数 -- #7936
  • Lockdir 包文件具有 .pkg 扩展名 -- #8014
  • 修复:下载本地仓库不起作用 -- #8060
  • 针对无效 opam 仓库的测试错误 -- #7830
  • 锁定目录重新生成安全性 -- #7832
  • 从当前切换生成 lockdir -- #7863
  • 在 Dune-terms 中实现 OpamSysPoll -- #7868
  • Lockdir 编码/解码往返测试 -- #7914
  • 记录为什么本地 opam 仓库路径是 Filename.t -- #7971
  • 使用 opam 切换生成 lockdir 时优先选择最旧的 -- #7980
  • 指定上下文的参数到 dune pkg lock -- #7970
  • Lockdirs 仅包含数据 -- #7979
  • 默认情况下优先选择最新的包 -- #8030
  • dune pkg lock 中不要获取全局锁 -- #8016
  • lockdir 中的条件依赖项 -- #8050
  • 从 Lock_dir.Pkg.t 中移除 lock_dir 字段 -- #7965
  • 功能(pkg):额外源 -- #8015

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

贡献者:@rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@emillon (Tarides)、@Leonidas (Tarides)、@3Rafal (Tarides)、@christinerose (Tarides)、@sabine (Tarides)

opam 2.2 的首个 alpha 版本刚刚发布!

最受期待的功能是原生 Windows 兼容性:opam 现在可以在任何 Windows 终端中启动!它目前需要预先安装 Cygwin,这是一个将在 alpha2 中解决的限制。

如公告中所述,需要注意的是 opam-repository 尚未与 Windows 兼容。它需要将来自 ocaml-opam/opam-repository-mingwdra27/opam-repository 的补丁合并到上游。这将在 opam 2.2 的最终版本发布之前完成,因此 opam init 可以在 Windows 上使用上游 opam-repository

Windows 支持不是本次发布中唯一的令人兴奋的功能。要了解 opam 2.2 中包含的其他重要功能,请阅读 公告,并随时在 讨论帖 中分享您的反馈。

活动

  • Windows 支持
    • 改进的本地 cygwin 安装检测 -- #5544
    • 对 Windows shell 进行了一些更新 -- #5541
    • 修复了 C++ 编译器带有前缀时的检测问题 -- #5556
  • 其他改进
    • 修复了 opam install/remove/upgrade/reinstall 中的性能回归 -- #5503
    • 调整为打开发布文件以供读取 -- #5568
    • 修复了 OpenSSL 缺少消息 -- #5557
    • 增强错误报告,在无法解析版本时打印版本 -- #5566
  • 发布管理
    • 完成发布:将测试与 opam 版本解耦 -- #5578
    • 使用必要的更新准备 2.2.0~alpha 版本的发布 -- #5580
    • 在 install.sh 中包含 2.2.0-alpha 二进制文件 -- #5588
  • alpha 发布后的 PR
    • 自述文件更新 -- #5589
    • 文档:更新文档以嵌入到 ocaml.org 中 -- #5593 #5594
    • 添加一些测试 -- #5385
    • 当标准输出不是 TTY 时改进输出整洁度 -- #5595
    • 更新冲突字段的 lint 过滤器,该过滤器不支持包变量 -- #5535
    • 应用自动更新以静默自动生成警告 -- #5555
  • 安全审计
    • 修复了 opam 在本地缓存损坏时未检查其校验和就安装包的问题 -- #5538
    • Reftests:添加测试以检查 URL 处理行为 -- #5560
    • lint:添加一些 lint 和 URL 检查修复 -- #5561
    • opamfile:可转义路径上的解析错误 -- #5562
    • 源:添加 --no-checksums 和 --require-checksums 标志 -- #5563
    • 不再使用额外文件填充 opam 文件 -- #5564

[Dune] 改善 Dune 的文档

贡献者:@emillon (Tarides)

增强 Dune 文档的工作仍在继续。过去的工作重点是文档的高级组织,新的结构已作为 Dune 3.8 版本的一部分 发布。本月,对文档本身的内容进行了各种改进。

活动

[Dune] 新的 dune show 命令

贡献者:@Alizter、@rgrinberg (Tarides)、@snowleopard (Jane Street)

已添加一个新的 dune show 命令组作为现有 dune describe 命令的别名。

新的命令组带有两个新命令,dune show targetsdune show aliases,以增强对 Dune 项目的内省和可用 Dune 命令的可发现性。

  • dune show targets [OPTION]… [DIR]… 受到 ls 的启发,并打印给定目录中可用的目标。
  • dune show aliases [OPTION]… [DIR]… 打印给定目录中可用的别名。

欢迎提供关于这些新命令的反馈,您可以在Dune 的问题跟踪器上分享。

活动

生成文档

[odoc]odoc 添加搜索功能

贡献者:@panglesd (Tarides), @EmileTrotignon (Tarides), @trefis (Tarides)

上个月开始的关于sherlodoc的性能分析和优化工作已经取得了成果:数据库大小显著减小,索引时间也大大缩短。

此外,在 OCaml.org 团队的建议下,对搜索功能的 UI 进行了全面改版。

然后将注意力转向更广泛地测试(和调试)索引/搜索。

此外,在输出搜索索引的使用统计方面取得了进展。具体来说,将 occurrences 的支持从源代码渲染中分离出来,并添加了对计算值、模块、类型、模块类型、类类型和构造函数的 occurrences 数量的支持。

不同的 pull request 正在接近合并就绪状态。下一步将是调整 Dune 和 OCaml.org 驱动程序,以便 odoc 的用户可以使用该功能。

活动

代码编辑和重构

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

贡献者:@vds (Tarides), @let-def (Tarides)

项目范围引用所需的所有 pull request 堆栈(包括编译器补丁、ocaml-uideps、Dune、Merlin 和 ocaml-lsp)都已重新整理,以包含最新的编译器更改。

这使得发现了一些关于一等模块和别名的问题。还向形状添加了别名跟踪,这是 occurrences 区分同一模块的不同别名所必需的。

活动

[Merlin] 提高 Merlin 的性能

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

提高 Merlin 性能的工作包括持续进行 Merlin 基准测试和错误回归 CI 管道的工作。修复了 merl-an 中的几个问题,以稳定基准测试 CI 和在 Merlin 中开启的错误回归 CI 的概念证明 (POC)。

基准测试 CI 已于 7 月初合并,因此 Merlin 现在正在持续进行基准测试以检测性能回归。

下个月,将继续对错误回归 CI 的最佳方法进行实验,然后再重新关注具体的性能改进。

活动

[OCaml LSP] 将 OCaml LSP 的 Merlin 分支合并到上游

贡献者:@voodoos (Tarides), @3Rafal (Tarides)

删除 OCaml LSP 的 Merlin 分支的 PR 已合并!

合并后,添加了与 OCaml 5.1 的兼容性补丁,并发布了 OCaml LSP 1.16.1。

活动

[OCaml LSP] 提取代码操作

贡献者:@jfeser, @rgrinberg (Tarides)

OCaml LSP 1.16.1 为 LSP 引入了两种新的代码操作类型:Extract localExtract function

  • Extract local 重构操作获取一个表达式,并将其作为新的局部 let 绑定引入到封闭函数中。
let f x =  $x+1$ + 2 (* $..$ is the selected code *)
(* Becomes: *)
let f x = 
  let new_var = x + 1 in 
  new_var + 2
  • Extract function 重构操作获取一个表达式,并将其作为封闭模块中的一个新函数引入。
let f x =  $x+1$ + 2 (* $..$ is the selected code *)
(* Becomes: *)
let new_fun x = x + 1
let f x = new_fun x + 2

活动

[OCaml LSP] 支持内联提示

贡献者:@jfeser, @rgrinberg (Tarides), @vds (Tarides)

LSP 3.17 规范引入了内联提示功能,这是一项增强功能,允许编辑器将注释与文本内联集成,以便显示参数名称、类型提示等。

本月见证了 OCaml LSP 服务器中内联提示的实现工作开始。目前,pull request 正在审查中,计划将其集成到后续的次要版本 OCaml LSP 1.17.0 中。

image|383x500

活动

代码格式化

[OCamlFormat] 缩小 OCamlFormat 和 ocp-indent 之间的差距

贡献者:@gpetiot (Tarides) 和 @EmileTrotignon (Tarides), @Julow (Tarides), @ceastlund (Jane Street)

几个月前开始的将 OCamlFormat 的 janestreet 配置文件与 ocp-indent 的输出更紧密地对齐的工作在本月继续进行。本月的大部分更改都围绕着注释的处理。

OCamlFormat 团队也正在准备发布 OCamlFormat 0.26.0,其中将包含过去几个月实施的所有错误修复和改进。如果您想了解这些格式更改的概况,请查看一些预览 PR。

活动