平台通讯:2024年3月-5月
欢迎阅读第十一期OCaml平台通讯!
在本期2024年3月-5月通讯中,我们很高兴为您带来OCaml平台的最新信息,延续我们一贯的传统,重点介绍往期通讯中看到的最新进展。要了解我们前进的方向,特别是在开发工作流程和用户体验改进方面,请查看我们的路线图。
亮点
- Dune包管理的探索已达到最小可行产品(MVP)阶段:一个版本的Dune可以构建像OCaml.org和Bonsai这样非平凡的项目。有了可运行的MVP,团队正在将重点转移到将Dune包管理交到社区手中。为此,我们启动了Dune开发者预览计划,我们将与用户一起测试Dune包管理,并在准备最终发布时改进用户体验。
- opam团队发布了opam 2.2的第二个测试版,并借此打开了最终PR,以便为opam-repository添加对Windows OCaml的支持。一旦PR合并,opam 2.2就可以与Windows上的上游opam-repository一起使用,这为很快发布第三个测试版以及随后的候选版本铺平了道路。
- odoc团队已经完成了Odoc 3.0的初始设计,并开启了多个RFC以收集社区的意见。我们已经实现了一个遵循Odoc 3.0设计的新的Odoc驱动程序,并且已经开始对设计的关键部分进行原型设计。
- Merlin的项目范围引用查询即将发布。必要的编译器PR已合并并包含在OCaml 5.2中,而Dune规则PR已合并并包含在Dune 3.16中。接下来的步骤是将Merlin中的PR本身以及OCaml LSP中的一个小补丁合并。
- 与
ppx_deriving.std
(即[@@deriving show, make, ord, eq, ...]
)一起提供的标准派生器集合以及ppx_deriving_yojson
现在直接针对Ppxlib的API编写。这从两个方面影响了开发者。首先,它允许您在包含这些派生器的项目中享受可靠的编辑器功能(Ppxlib保留了Merlin的位置不变性)。其次,您可以通过在这些派生器上使用Ppxlib的deriving_inline
特性来避免对这些派生器的硬依赖。非常感谢@sim642的所有工作以及非常友善的耐心,@NathanReb的审查和发布管理,以及所有其他参与者!
发布
- Ppxlib 0.32.1
- Merlin 5.0
- Dune 3.14.2
- Dune 3.15.0
- Dune 3.15.2
- Dune 3.15.3
- Odoc 2.4.2
- opam 2.1.6
- opam 2.2.0~beta2
- ocamlformat 0.26.2
W4)
[Dune] 在Dune中探索包管理 (贡献者:@rgrinberg (Tarides), @Leonidas-from-XIV (Tarides), @gridbugs (Tarides), @Alizter
原因:将OCaml工具统一到单个命令行下,用于所有开发工作流程。这解决了社区报告的最重要痛点之一。
内容:使用opam作为库,对将包管理集成到Dune中进行原型设计。我们引入了dune pkg lock
命令来生成锁文件,并增强了dune build
以处理锁文件中的依赖项。更多详细信息请参见Dune RFC。
总结
在过去的三个月里,在添加Dune对包管理的支持方面取得了重大进展。我们很高兴地报告,我们的原型已达到最小可行产品(MVP)阶段:一个实验性的Dune包管理版本,可用于构建非平凡的项目,包括OCaml.org和Bonsai,我们在测试中使用了这两个项目。
还有很长的路要走,但随着这一里程碑的达成,我们现在正将重点从原型设计转移到将功能交付给社区。我们正在转向与用户一起测试新的Dune功能,特别是现在我们已经很好地理解了技术障碍及其解决方法,我们将专注于验证和改进Dune包管理的开发者体验(DX),以准备首次发布。
为此,Dune团队启动了Dune开发者预览计划。我们目前正在与选定的测试人员一起测试包管理的开发者预览版,一旦解决最大问题,我们将将其开放给更广泛的社区。
活动
- 继续解决ocamlfind和zarith的剩余问题。
- 为ocamlfind和zarith问题添加了重现PR – ocaml/dune#10233,ocaml/dune#10235。
- 对可重定位ocamlfind的解决方案进行了迭代 – ocaml/ocamlfind#72。
- 删除了ocamlfind中的
.mml
引用 – ocaml/ocamlfind#75。 - 为安装操作设置OCAMLFIND_DESTDIR以修复ocamlfind安装问题 – ocaml/dune#10267。
- 添加了一个测试,重现当pin stanza包含工作区外部的相对路径时锁定时的错误 – ocaml/dune#10255。
- 修复了不同文件系统上目录的包创建问题 – ocaml/dune#10214。
- 开启了PR以解决用户错误,改进错误消息,并增强pkg规则的环境处理 – ocaml/dune#10385,ocaml/ocamlbuild#327,ocaml/dune#10403,ocaml/dune#10407,ocaml/dune#10455。
- 解决了与
withenv
操作、dune pkg lock
以及变量更新的意外行为相关的几个问题 – ocaml/dune#10404,ocaml/dune#10408,ocaml/dune#10417,ocaml/dune#10440,ocaml/opam#5925,ocaml/opam#5926。 - 批准了ocamlfind和ocamlbuild的可重定位版本 – ocaml-dune/opam-overlays#1,ocaml-dune/opam-overlays#2。
- 清理并征求了关于可重定位ocamlfind PR的反馈 – ocaml/ocamlfind#72。
- 为了解决编译器(目前)不可重定位的事实,我们致力于在Dune中添加支持以管理编译器和开发工具,这是一个我们称为Dune Toolchain的实验性功能。 – ocaml/dune#10470,ocaml/dune#10474,ocaml/dune#10475,ocaml/dune#10476,ocaml/dune#10477,ocaml/dune#10478。
- 解决了与pkg lock、环境更新和包管理相关的各种问题 – ocaml/dune#10512,ocaml/dune#10499,ocaml/dune#10498,ocaml/dune#10531,ocaml/dune#10521,ocaml/dune#10539,ocaml/dune#10540,ocaml/dune#10543,ocaml/dune#10544,ocaml/dune#10545,ocaml/dune#10538,ocaml/dune#10542,ocaml/dune#10595,ocaml/dune#10596,ocaml/dune#10592,ocaml/dune#10593。
- 合并了PR以对rsync URL使用解包代码并禁用hg/darcs获取代码 – ocaml/dune#10556,ocaml/dune#10561。
W5)
[opam] opam 2.2中的Windows原生支持 (贡献者:@rjbou (OCamlPro), @kit-ty-kate (Ahrefs), @dra27 (Tarides), @AltGr (OCamlPro)
原因:通过集成原生的opam和opam-repository
支持来增强OCaml在Windows上的可行性,培养更大的社区,并提供更多Windows友好的包。
内容:发布具有原生Windows支持的opam 2.2,使官方的opam-repository
能够在Windows平台上使用。
总结
opam团队正在接近发布最终版本的opam 2.2,该版本支持Windows。在过去的几个月中,我们发布了opam 2.2的第二个测试版,解决了用户在先前版本中报告的一些问题,包括Windows问题。
令人兴奋的是,我们还打开了最终PR,将对Windows OCaml的支持添加到opam-repository中。随着PR的合并,opam团队预计能够在6月份转向发布候选版本。
敬请关注未来几周和几个月内更多激动人心的新闻和发布!
活动
- 在opam-repository中打包编译器
- 我们在windows-initial分支中清理了WIP项目,创建了mingw-w64-shims存储库,用于mingw-w64-shims opam包所需的C存根程序和生成脚本。
- msvs-detect的各种修复已上游,并且opam打包PR已完成 – metastack/msvs-tools#17,metastack/msvs-tools#18。
- 为Visual Studio配置开启了初始的上游PR – ocaml/opam-repository#25440,conf-zstd的重组 – ocaml/opam-repository#25441,以及原生的Windows depexts – ocaml/opam-repository#25442。
- 修复了上游的mccs包依赖项 – ocaml-opam/ocaml-mccs#52,ocaml/opam-repository#25482。
- 上游支持flexdll的源代码打包 – ocaml/flexdll#135。
- 为OCaml 5.3.0处理winpthreads的打包脚本 – ocaml/winpthreads#1。
- 为mingw-w64-shims开启了进一步的上游PR – ocaml/opam-repository#25454,以及flexdll和winpthreads源代码包 – ocaml/opam-repository#25512。
- 审查并测试了与 opam-repository-mingw 的 sunset 分支 4.14.2 版本相关的更改 – ocaml-opam/opam-repository-mingw#20,ocaml-opam/opam-repository-mingw#21。
- 更新了 windows-initial 分支以支持 MSYS2,包括创建 msys2-opam 以补充 mingw-w64-shims。
- 将 ocaml-variants.5.1.1+effect-syntax 包相关问题上游 – ocaml/opam-repository#25645。
- 调查了 BER MetaOCaml,确定 4.14.1+BER 在 Windows 上无法工作,并在 opam-repository 中将其禁用 – ocaml/opam-repository#25648。
- 进一步处理了草稿 PR,解决了包维护者电子邮件地址无效的问题 – ocaml/opam-repository#25826。
- 开启了 Windows 编译器支持的主 PR – ocaml/opam-repository#25861,并同时开启了更新编译器 opam 文件的草稿 PR – ocaml/ocaml#13160。
- 将 ocaml/ocaml#13100 反向移植到 5.1.x ocaml-variants – ocaml/opam-repository#25828,等待 opam 2.2.0~beta3 版本发布。
- 发布 opam 2.2
- 完成了各种补丁和 PR 的工作,包括修复 Dune 中带重音字符的问题 – ocaml/opam#5861,ocaml/opam#5871,janestreet/spawn#58,ocaml/opam#5862。
- 致力于 Windows 的性能改进,包括添加作业状态和慢速运行构建作业的进度指示器概念验证 – ocaml/opam#5883。
- 完成 opam 2.2.0 beta2 中 Cygwin PATH 处理的修复 – ocaml/opam#5832。
- 将内部 cygwin 安装标记为推荐 - ocaml/opam#5903
- 利用
%{?val_if_true:val_if_false}%
语法来支持扩展名称中包含 + 的包的变量 - ocaml/opam#5840 - 修复了下载 URL 中包含无效字符和 opam 内部状态相关的问题 – ocaml/opam#5921,ocaml/opam#5922。
- 为
opam init
组装了测试框架,并解决了opam lint
警告相关的问题 – dra27/opam-testing,ocaml/opam#5927,ocaml/opam#5928。 - 修复了环境更新反转和 GitHub Actions 中的细微问题 – ocaml/opam#5935,ocaml/opam#5938。
- 发布 opam 2.2~beta2.
- 修复了与环境变量处理相关的问题 – ocaml/opam#5935。
- 完成 Git for Windows 菜单的修复 – ocaml/opam#5963。
- 对
--cygwin-extra-packages
做了少量修复 – ocaml/opam#5964。 - 重构了
opam init
以获得更合理的体验 – ocaml/opam#5963。 - 更新了 lint 警告 41 PR – ocaml/opam#5927。
- 响应了 Windows 编译器包测试人员发现的问题 – ocaml/flexdll#138,ocaml/flexdll#139。
- 完全重做了
opam init
以检测 Cygwin 和 MSYS2 安装。 - 修复了
?
运算符和 MSYS2 原生 curl 实现相关的问题 – ocaml/opam#5983,ocaml/opam#5984。
odoc
] Odoc 3.0:统一 OCaml.org 和本地包文档 (W25)
[贡献者:@jonludlam (Tarides),@julow (Tarides),@panglesd (Tarides),Luke Maurer (Jane Street)
原因:改进本地文档生成工作流程将有助于包作者为其包编写更好的文档,合并不同的 odoc
文档生成器将有助于使 odoc
的持续改进惠及更多用户。
内容:我们将创建驱动程序必须遵循的约定,以确保其输出功能正常。建立后,我们将更新 Dune 规则以遵循这些规则,访问新的 odoc
功能(例如,源代码渲染),并提供与 docs.ocaml.org 相似的功能(例如导航侧边栏)。这将有效地使 Dune 可用于生成 OCaml.org 包文档。
总结
Odoc 团队在即将推出的 Odoc 3.0 上取得了重大进展。我们在巴黎举行了富有成效的面对面会议,讨论了 CLI、源代码渲染和引用等关键设计方面。这些讨论导致发布了设计规范各个组件的 RFC。
我们还开始实现一个新的 Odoc 驱动程序,该驱动程序符合新设计以进行测试,并开始对几个新功能进行原型设计。
虽然关于 RFC 和特定功能的讨论仍在继续,但我们非常高兴能够有一套可靠的设计规范供社区审查,并开始实施新设计的主要部分。
活动
- 调查了包名称/库名称不匹配和模块名称冲突 – jonludlam/2997e905a468bfa0e625bf98b24868e5,jonludlam/0a5f1391ccbb2d3040318b154da8593a。
- 继续开展 odoc 3.0 设计工作,包括会议和讨论,最终发布了 RFC – ocaml/odoc/discussions/1097。
- 处理了导航 PR,添加了功能,修复了 bug,并完成了 rebase – ocaml/odoc#1088。
- 在巴黎会面讨论 odoc 3.0 设计,涵盖了 CLI、渲染源代码和引用等主题。
- 开启了一个 PR,在独立页面中提供了对 markdown 的基本支持 – ocaml/odoc#1110。
- 发布了当前的资产提案作为讨论 – ocaml/odoc#1113。
- 继续讨论 Markdown 渲染和资产引用 - ocaml/odoc#1110。
- 实现了一个新的驱动程序来测试 odoc 3.0 实现 – ocaml/odoc#1121,ocaml/odoc#1128。
- 致力于实现 Odoc 3.0 规范中的 --parent-id 标志部分 – ocaml/odoc#1126。
- 致力于实现
-L
和-P
标志 ocaml/odoc#1132
W19)
[Merlin] 在 Merlin 中支持项目范围的引用 (贡献者:@vds (Tarides),@Ekdohibs (OCamlPro),@Octachron (INRIA),@gasche (INRIA),@emillon (Tarides),@rgrinberg (Jane Street),@Julow (Tarides)
原因:通过提供项目范围的引用编辑器功能来增强开发人员的代码导航和重构,使 OCaml 与其他语言中的编辑器体验保持一致。
内容:引入 ocamlmerlin server occurrences
和 LSP textDocument/references
支持,扩展编译器的 Shapes 以用于全局出现,并在 Dune、Merlin 和 OCaml LSP 中集成这些功能。
总结
在过去的几个月里,Merlin 的项目范围引用查询的发布取得了长足的进步:编译器 PR 已合并并包含在现已发布的 OCaml 5.2 中;Dune 规则 PR 已合并,并因此对索引工具进行了重大性能改进。最终的 PR 在 Merlin 中处于开放和审查状态。该 PR 以及支持该功能的小型 LSP 补丁即将合并。
Merlin 上的 PR 还为 Emacs 的 Merlin 服务器插件添加了对该功能的支持。对 Vim 的 Merlin 服务器插件的支持已单独添加。所有基于 LSP 的编辑器插件都将自动支持新功能。
活动
- 我们跟进了我们的编译器 PR 以提高形状别名弱化简的性能。它已合并,并已包含在 OCaml 5.2.0 中。 – ocaml/ocaml#13001
- 我们改进了驱动索引器的 Dune 规则:简化了规则,添加了基准测试,讨论并改进了性能。该 PR 已合并,并已包含在 Dune 3.16 中。 - ocaml/dune#10422
- 我们完善了索引器
ocaml-index
:对其进行了分析,并将速度提高了约 2 倍,并改进了其 CLI。 - 我们在基于 Merlin 服务器的 Vim 插件中添加了
:MerlinOccurrencesProjectWide
命令 - ocaml/merlin#1767