平台新闻简报:2024 年 6 月 - 8 月

欢迎来到第十二期 OCaml 平台新闻简报!

在 2024 年 6 月 - 8 月的这一期中,我们很高兴向您介绍 OCaml 平台的最新进展,继续我们的一贯做法,重点介绍最近的开发进展,如 往期 所见。要了解我们前进的方向,特别是在开发工作流程和用户体验改进方面,请查看我们的 路线图

亮点

  • Dune 包管理即将进入公开测试阶段: 开发者预览计划 扩展到 60 多人报名参加面试(已进行 16 次),NPS 从 +9 上升到 +28!公开测试阶段即将到来,并带来激动人心的功能,例如自动依赖项锁定和开发工具管理。 看看它的实际效果
  • Opam 2.2 发布: Windows 原生支持已发布!通过 opam init 无缝安装,opam-repository 与 Windows 兼容。OCaml 在 Windows 上现在已成为现实。
  • Odoc 3.0 即将发布:Odoc 中已准备就绪的新功能,例如全局侧边栏和媒体支持。Dune 和 OCaml.org 管道的集成正在进行中 - 准备好很快体验新的文档功能! 查看 RFC
  • 项目级引用已上线:Merlin 5.1 和 OCaml LSP 1.18.0 为您的编辑器带来了强大的代码导航功能。它建立在多年的编译器工作基础之上,对于大型代码库来说是一个重大改变。
  • 开始缩短 Merlin 和 OCaml LSP 之间的差距:用于类型封闭、文档等的新的 LSP 查询。我们正在努力实现由 OCaml LSP 支持的所有编辑器的一致且功能丰富的体验。

版本

Dune 包管理 (W4)

贡献者:@rgrinberg (Jane Street), @Leonidas (Tarides), @gridbugs (Tarides), @maiste (Tarides), @ElectreAAS (Tarides), @moyodiallo (Tarides), @Alizter

概述:将包管理集成到 Dune 中,使其成为 OCaml 开发所需唯一的工具。这种统一消除了安装时间(只需下载 Dune 的预构建二进制文件),自动管理外部工具(例如,用于 dune fmtdune ocamllsp),并通过缓存显著减少构建时间(包和编译器只在项目之间构建一次)。

摘要

继我们在 上期新闻简报 中宣布 Dune 的包管理已进入最小可行产品 (MVP) 阶段之后,我们在既定目标上取得了实质性进展。正如承诺的那样,我们已将重点从原型设计转移到用户测试和改进开发者体验 (DX) 上。

开发者预览计划(参见 最新更新)已从其早期阶段显著扩展。我们已从 60 位报名者中进行了大约 16 次开发者面试,代表了 OCaml 社区的不同组成部分。受访者包括新手和经验丰富的 OCaml 用户。值得注意的是,约 40% 的参与者拥有超过 3 年的 OCaml 经验,而 35% 的参与者是相对新手,拥有不到一年的经验。大多数参与者来自 Linux 和 macOS 环境,代表着不同的领域,包括科技公司、研究机构和独立开发者。

这些会议提供了宝贵的反馈意见,并推动了改进。这些广泛的用户测试取得了成效,净推荐值从 +9 上升到估计的 +28 - 这清楚地表明,社区对我们所做出的改进感到兴奋。

自上次更新以来的主要发展包括

  • 启用了包管理的 Dune 的夜间二进制文件分发版,将在未来几周内公开提供。
  • 我们开始着手自动处理开发工具(ocamlformat、ocamllsp、odoc) - 用户可以运行 dune fmtdune ocamllsp,如果它们不可用,Dune 会自动安装 OCamlFormat 和 OCaml LSP。
  • 项目依赖项发生更改时,实现自动依赖项锁定 - 您现在可以在监视模式下运行 Dune,并在更新您的 dune-project 后,让它在没有任何干预的情况下安装您的依赖项。
  • 我们默认启用了 Dune 缓存,它与您的包依赖项一起使用。通过此更改,Dune 在构建新项目时不会重新编译依赖项超过一次,包括编译器!

该团队已不再仅仅使用 OCaml.org 和 Bonsai 进行测试,现在还在 opam 存储库中进行更广泛的兼容性测试。初步结果表明,大约 50% 的包可以使用启用了包管理的 Dune 编写,并且正在努力提高覆盖率(我们预计解决少数几个基础包中的问题将显著提高这一比例)。

为了兑现准备第一个版本的承诺,该团队计划在未来几周内发布公开测试版。这标志着一个重大步骤,从我们当前与选定的测试人员进行的私有开发者预览测试,转向更广泛的社区发布。

敬请关注即将发布的公告,在此期间,请查看演示以及来自测试人员的一些热情反馈。

活动

opam 2.2 中的 Windows 原生支持 (W5)

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

概述:发布 opam 2.2,其中包含 Windows 原生支持,以增强 OCaml 在 Windows 上的可行性,使官方 opam-repository 可用于 Windows,并鼓励更多 Windows 友好的包。

摘要

opam 2.2.0 的发布,在 Discuss 上宣布,标志着 OCaml 生态系统的一个重要里程碑。此版本在 Windows 上为 opam-repository 中的 opam 客户端和编译器包提供原生支持,为 OCaml 在该平台上的开发开辟了新的可能性。

opam 2.2.0 正式支持 Cygwin,并且与 MSYS2 兼容。Windows 用户现在可以在其首选的控制台中运行 opam init 以进行引导式安装,从而获得功能完备的 OCaml 环境。此版本代表了 多年努力 的成果,其中包含了社区的大量贡献。

OCaml 生态系统已经适应了这种新功能。已将 Windows 编译的 CI 检查 添加到 opam-repository,并且 GitHub Action ocaml/setup-ocaml 现在使用 opam 2.2.0,方便在 GitHub 项目中进行 OCaml 的 Windows 开发。

社区成员正在积极努力改进整个生态系统中的 Windows 兼容性。值得注意的努力包括 Hugo HeuzardOCamlBuild 上的工作以及其他几个 与 Windows 相关的 PR

我们鼓励包作者为其项目设置 Windows CI 并解决 Windows 相关问题。这项集体努力对于扩展 OCaml 在 Windows 平台上的覆盖范围和可用性至关重要。

活动

使用 Odoc 3.0 升级 OCaml 软件包文档 (W25)

贡献者:@jonludlam (Tarides),@julow (Tarides),@panglesd (Tarides),@EmileTrotignon (Tarides),Luke Maurer (Jane Street)

概要:使用 odoc 3 升级 OCaml 软件包文档体验,包括改进的导航、跨软件包引用、媒体支持等。此升级旨在改进本地和 OCaml.org 上的文档体验,鼓励更高质量的软件包文档。

摘要

在完成 odoc 3.0 的 RFC 并进行社区审查后,我们在实施新设计和功能方面取得了重大进展。过去几个月的进展使我们接近 odoc 3.0 功能集的完整实施。随着我们完成开发并接近第一个版本,我们的重点正在转向与生态系统其余部分的集成。

过去几个月的关键发展包括

  • odoc CLI 添加新选项,以开始实施odoc 3 CLI
  • 实施新语法,例如路径引用
  • 开发具有 TOC 的全局侧边栏,其中包含独立页面和软件包模块层次结构

随着我们接近完成 odoc 3.0 的核心功能集,我们的重点正在转向完成与 Dune 和 OCaml.org 文档管道的集成。我们很高兴将所有这些改进交付到您的手中,并收集您对新文档体验的反馈。请继续关注有关测试机会和 odoc 3.0 即将发布的公告!

活动

OCaml 编辑器中的项目级引用 (W19)

贡献者:@vds (Tarides)

概要:在 Merlin 和 OCaml LSP 中引入项目级引用功能,以增强代码导航和重构功能,使 OCaml 的编辑器体验与其他现代编程语言保持一致。

摘要

正如6 月宣布的那样,Merlin 项目级引用现在在 Merlin 5.1 和 OCaml LSP 1.18.0 的预览版中可用。使用 LSP 支持的编辑器(例如带有 OCaml Platform 扩展的 VSCode)和经典 Emacs 和 Vim 插件的用户现在可以查询 OCaml 术语的项目级引用。这需要使用新的 Dune 别名@ocaml-index构建索引。

此版本代表了 Merlin 团队多年努力的顶峰,包括在编译器方面进行了大量工作,以提供在 Merlin 中实施此功能所需的信息。

我们很高兴与社区分享此功能,并期待您的反馈。

虽然此功能在大多数情况下应该能正常工作,但我们意识到一些限制。我们的下一步包括添加对接口文件和模块路径的支持。敬请关注!

活动

弥合 Merlin 和 OCaml LSP 之间的差距 (W19)

贡献者:@xvw (Tarides),@vds (Tarides)

概要:努力实现 Merlin 和 OCaml LSP 之间的功能等效性,为所有编辑器提供一致且功能丰富的开发体验,使 OCaml LSP 成为 OCaml 编辑器支持的综合后端。

摘要

6 月,我们开始努力弥合 OCaml LSP 和 Merlin 之间的差距。我们从在 OCaml LSP 中公开 Merlin 的类型封闭请求开始。此功能现在可用作ocamllsp/typeEnclosing,我们将继续进行编辑器集成工作。

提醒一下,Merlin 的type-enclosing功能允许用户获取光标下标识符的类型。它突出显示标识符并显示其类型。用户可以遍历类型树以显示围绕光标的更大表达式的类型。

自 6 月以来,我们一直在努力开发一些新的 LSP 查询和代码操作,包括

  • 自定义ocamllsp/getDocumentation 查询以请求odoc 文档
  • 自定义ocamllsp/construct 查询以浏览和填充类型化的空洞 (_)
  • 基于 Merlin 的 Jump 命令的语法和语义移动快捷方式的代码操作

活动