平台新闻简报: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 支持的所有编辑器的一致且功能丰富的体验。
版本
- opam 2.2.0~beta3
- opam 2.2.0~rc1
- opam 2.2.0
- opam 2.2.1
- Dune 3.16.0
- opam-publish 2.3.1
- Merlin 5.1
- Merlin 4.16
- Merlin 4.15
- OCaml LSP 1.19.0
- OCaml LSP 1.18.0
- Ppxlib 0.33.0
W4)
Dune 包管理 (贡献者:@rgrinberg (Jane Street), @Leonidas (Tarides), @gridbugs (Tarides), @maiste (Tarides), @ElectreAAS (Tarides), @moyodiallo (Tarides), @Alizter
概述:将包管理集成到 Dune 中,使其成为 OCaml 开发所需唯一的工具。这种统一消除了安装时间(只需下载 Dune 的预构建二进制文件),自动管理外部工具(例如,用于 dune fmt
或 dune ocamllsp
),并通过缓存显著减少构建时间(包和编译器只在项目之间构建一次)。
摘要
继我们在 上期新闻简报 中宣布 Dune 的包管理已进入最小可行产品 (MVP) 阶段之后,我们在既定目标上取得了实质性进展。正如承诺的那样,我们已将重点从原型设计转移到用户测试和改进开发者体验 (DX) 上。
开发者预览计划(参见 最新更新)已从其早期阶段显著扩展。我们已从 60 位报名者中进行了大约 16 次开发者面试,代表了 OCaml 社区的不同组成部分。受访者包括新手和经验丰富的 OCaml 用户。值得注意的是,约 40% 的参与者拥有超过 3 年的 OCaml 经验,而 35% 的参与者是相对新手,拥有不到一年的经验。大多数参与者来自 Linux 和 macOS 环境,代表着不同的领域,包括科技公司、研究机构和独立开发者。
这些会议提供了宝贵的反馈意见,并推动了改进。这些广泛的用户测试取得了成效,净推荐值从 +9 上升到估计的 +28 - 这清楚地表明,社区对我们所做出的改进感到兴奋。
自上次更新以来的主要发展包括
- 启用了包管理的 Dune 的夜间二进制文件分发版,将在未来几周内公开提供。
- 我们开始着手自动处理开发工具(ocamlformat、ocamllsp、odoc) - 用户可以运行
dune fmt
或dune ocamllsp
,如果它们不可用,Dune 会自动安装 OCamlFormat 和 OCaml LSP。 - 项目依赖项发生更改时,实现自动依赖项锁定 - 您现在可以在监视模式下运行 Dune,并在更新您的 dune-project 后,让它在没有任何干预的情况下安装您的依赖项。
- 我们默认启用了 Dune 缓存,它与您的包依赖项一起使用。通过此更改,Dune 在构建新项目时不会重新编译依赖项超过一次,包括编译器!
该团队已不再仅仅使用 OCaml.org 和 Bonsai 进行测试,现在还在 opam 存储库中进行更广泛的兼容性测试。初步结果表明,大约 50% 的包可以使用启用了包管理的 Dune 编写,并且正在努力提高覆盖率(我们预计解决少数几个基础包中的问题将显著提高这一比例)。
为了兑现准备第一个版本的承诺,该团队计划在未来几周内发布公开测试版。这标志着一个重大步骤,从我们当前与选定的测试人员进行的私有开发者预览测试,转向更广泛的社区发布。
敬请关注即将发布的公告,在此期间,请查看演示以及来自测试人员的一些热情反馈。
- Mastodon 上的演示:Mastodon 或者 X
- “刚刚体验了 dune 包管理预览,看起来很不错” - https://x.com/ckarmstrong/status/1830937156434747566
- “我非常期待这个!不再有开关,不再有 opam,只有 Dune 像现代包管理器一样工作。我已经试用过它,它真的非常好。对 DX 的关注让我对 OCaml 的未来充满希望。” - https://x.com/synecdokey/status/1825533523283079474
活动
- 实施了解决方案以避免不稳定的编译器 - ocaml/dune#10668
- 添加了对多个校验和的支持 (ocaml/dune#10624, ocaml/dune#10791)
- 开始将 Dune 工具链功能上游 (ocaml/dune#10639, ocaml/dune#10719)
- 依赖项更改时添加了隐式重新锁定 - ocaml/dune#10641
- 改进了依赖项解析和约束处理 (ocaml/dune#10726)
- 添加了开发者预览功能和配置选项 (ocaml/dune#10627)
- 为包构建和锁定文件生成实施了进度指示器 (ocaml/dune#10802, ocaml/dune#10803)
- 改进了错误消息和日志记录 (ocaml/dune#10662)
- 为新的包管理功能创建了广泛的测试套件 (ocaml/dune#10798)
- 解决了构建特定包(例如,seq、lwt)的问题 (ocaml/dune#10788, ocaml/dune#10839)
- 为更快地构建启用获取操作的缓存 (ocaml/dune#10850)
- 改进了对 ocamlformat 等开发工具的处理 (ocaml/dune#10647)
- 开发了用于测试 opam 存储库上包兼容性覆盖率的工具。
W5)
opam 2.2 中的 Windows 原生支持 (贡献者:@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 Heuzard 在 OCamlBuild 上的工作以及其他几个 与 Windows 相关的 PR。
我们鼓励包作者为其项目设置 Windows CI 并解决 Windows 相关问题。这项集体努力对于扩展 OCaml 在 Windows 平台上的覆盖范围和可用性至关重要。
活动
- Opam 二进制文件
- 修复了 Windows 上
opam init
的问题 - ocaml/opam#5991, ocaml/opam#5992, ocaml/opam#5993, ocaml/opam#5994, ocaml/opam#5995, ocaml/opam#5996, ocaml/opam#5997, ocaml/opam#5998, ocaml/opam#6000 - 改进了 Windows 上慢速操作期间的状态显示 - ocaml/opam#5977
- 使 opam 能够与包含空格的 Windows 用户名一起使用 - ocaml/opam#5457
- 修复了
opam init -yn
以处理候选版本中的菜单 - ocaml/opam#6033 - 更新了从 GitHub 版本安装 opam 的 PowerShell 脚本:ocaml/opam#5906
- 修复了
setup-ocaml
和 depexts 的挂起问题 - ocaml/opam#6046
- 修复了 Windows 上
- 更新 opam-repository 使其与 Windows 兼容。
- 更新了
opam-repository
Windows CI -- ocaml/opam-repository#26081,ocaml/opam-repository#26073,ocaml/opam-repository#26080 - 在 OCaml-variants.5.2.0+msvc 中添加了 MSVC 的反向移植 -- ocaml/opam-repository#26082
- 更新了原生 Cygwin depexts -- ocaml/opam-repository#26130
- 使用特定于 Windows 的软件包信息更新了 opam-repository
- 添加了 Windows 编译器软件包 (ocaml/opam-repository#25861)
- 修复了 Windows 上 OCaml 变体的问题 (ocaml/opam-repository#26033)
- 更新并发布了 mingw-w64-shims.0.2.0 以修复 setup-ocaml 问题 (ocaml/opam-repository#26123)
- 更新了
- 发布了 opam 2.2.0 的稳定版本,具有完整的 Windows 支持 🎉 (公告)
W25)
使用 Odoc 3.0 升级 OCaml 软件包文档 (贡献者:@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 即将发布的公告!
活动
- 添加了
path-references
查找功能 -- ocaml/odoc#1150 - 添加了
--current-package
选项 -- ocaml/odoc#1151 - 修复了分层页面被赋予错误的父 ID -- ocaml/odoc#1148
- 解析指向页面和模块的
path-references
(ocaml/odoc#1142) - 支持文档中的资产和媒体 (ocaml/odoc#1184)
- 实施了“全局”侧边栏功能 (ocaml/odoc#1145)
- 添加了对外部页面和非软件包文档的支持 (ocaml/odoc#1183)
- 改进的 CSS,以提供更好的视觉效果 (ocaml/odoc#1159)
- 添加了用于索引生成的序列化输出 (ocaml/odoc#1084)
- 实施了 Voodoo/Dune 驱动程序以实现更好的集成 (ocaml/odoc#1168)
- 向 mld 页面添加了前置信息支持 (ocaml/odoc#1187)
- 改进的导航路径,显示软件包和库 (ocaml/odoc#1190)
W19)
OCaml 编辑器中的项目级引用 (贡献者:@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 中实施此功能所需的信息。
我们很高兴与社区分享此功能,并期待您的反馈。
虽然此功能在大多数情况下应该能正常工作,但我们意识到一些限制。我们的下一步包括添加对接口文件和模块路径的支持。敬请关注!
活动
- 完成了增量出现索引和相关 Dune 规则的工作 -- ocaml/dune#10422
- 修复了从接口文件查询的问题 -- ocaml/merlin#1779,ocaml/merlin#1781
- 当光标位于标签/构造函数声明上时改进了行为 -- ocaml/merlin#1785
- 发布了
Merlin.5.1-502
、ocaml-index.1.0
以及带有项目级出现支持的ocaml-lsp-server
的新预览版 -- ocaml/opam-repository#26114 - 在 Discuss 上宣布了发布 -- Merlin 和 LSP 中的项目级出现
- 为项目级出现编写了一个维基页面
- 更新了Merlin 网站
- 更新了平台变更日志
- 改进了对标签和构造函数声明的处理 (ocaml/merlin#1785)
- 贡献了编译器改进
- 为实现和接口实现了不同的唯一标识符 (ocaml/ocaml#13286)
- 开发了一个用于链接声明唯一标识符的系统 (ocaml/ocaml#13308)
- 为 longident 位置的改进做出了贡献 (ocaml/ocaml#13302)
W19)
弥合 Merlin 和 OCaml LSP 之间的差距 (贡献者:@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 命令的语法和语义移动快捷方式的代码操作
活动
- 添加了用于类型封闭和文档检索的自定义查询
- 类型封闭查询 (ocaml/ocaml-lsp#1304)
- 文档查询 (ocaml/ocaml-lsp#1336)
- 创建了自定义构造查询 (ocaml/ocaml-lsp#1348)
- 实施了语义和语法移动快捷方式 (ocaml/ocaml-lsp#1364)
- 反向移植并发布了带有必要命令的 Merlin 4.16 (opam-repository PR)
- 重构了从
ocaml-lsp
到merlin-lib
的Typedtree
使用 (ocaml/merlin#1811,ocaml/merlin#1812)