平台電子報:2023 年 6 月

歡迎來到 OCaml 平台電子報的第三期!

本期帶來了六月份針對 OCaml 平台所做的最新改進,旨在提升 OCaml 開發人員的體驗。如同先前的更新,本期電子報重點介紹目前正在探索或加強的開發工作流程。

本月最引人注目的亮點無疑是 opam 2.2 的第一個 alpha 版本!經過多年的努力(opam 2.1 大約在兩年前發布),opam 團隊所付出的辛勤工作的重要性不容小覷。非常感謝 opam 團隊(Raja Boujbel、David Allsopp、Kate Deplaix、Louis Gesbert,他們是 OCamlPro/Tarides 的聯合協作),特別是 Raja Boujbel 為完成此 alpha 版本而孜孜不倦地推動工作。公告中包含更多詳細資訊,我們鼓勵您在 Discuss 帖子上提供回饋。

  • 發布
  • 建置套件
    • [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 之間的差距

發布

六月是忙碌的一個月,總共發布了九個版本!其中包括三個 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
  • Lock 目錄重新產生安全性 -- #7832
  • 從目前交換產生 lockdir -- #7863
  • 在 Dune 術語中實作 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 中包含的其他重要功能,請閱讀 公告,並隨時在 Discuss 帖子上分享您的回饋。

活動

  • Windows 支援
    • 改善的本機 cygwin 安裝偵測 -- #5544
    • 對 Windows shell 進行了一些更新 -- #5541
    • 修正了 C++ 編譯器加上前置字元時的偵測問題 -- #5556
  • 其他改進
    • 修正 opam 安裝/移除/升級/重新安裝中的效能回歸問題 -- #5503
    • 調整為開啟讀取的發布檔案 -- #5568
    • 修正 OpenSSL 遺失訊息 -- #5557
    • 增強的錯誤報告,可在無法剖析版本時列印版本 -- #5566
  • 發布管理
    • 最終發布:將測試與 opam 版本分開 -- #5578
    • 使用基本更新為 2.2.0~alpha 版本做好準備 -- #5580
    • 在 install.sh 中包含 2.2.0-alpha 二進位檔 -- #5588
  • Alpha 版本後 PR
    • Readme 更新 -- #5589
    • 文件:更新文件以嵌入 ocaml.org 中 -- #5593 #5594
    • 新增一些測試 -- #5385
    • 改善 stdout 不是 TTY 時的輸出整潔度 -- #5595
    • 更新衝突欄位的 linter,該 linter 不支援套件變數 -- #5535
    • 應用 autoupdate 來消除自動產生警告 -- #5555
  • 安全性稽核
    • 修正當本機快取損毀時,opam 安裝套件而不檢查其檢查碼的問題 -- #5538
    • Reftests:新增測試以檢查 URL 處理行為 -- #5560
    • linter:為 URL 檢查新增一些 linter 和修正 -- #5561
    • opamfile:可逸出路徑的剖析錯誤 -- #5562
    • source:新增 --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 團隊的建議下,我們針對搜尋功能的使用者介面進行了全面改版。

接下來,我們將注意力轉向更廣泛地測試(和除錯)索引/搜尋功能。

另外,在輸出搜尋索引的使用統計數據方面也取得了進展。具體來說,我們將出現次數的支援與原始碼渲染分離,並新增了對值、模組、類型、模組類型、類別類型和建構子的出現次數進行計數的支援。

不同的 Pull Request 已接近合併準備狀態。下一步將調整 Dune 和 OCaml.org 的驅動程式,以使 odoc 的使用者可以使用此功能。

活動

程式碼編輯和重構

[Merlin] Merlin 中對專案範圍參考的支援

貢獻者:@vds (Tarides), @let-def (Tarides)

專案範圍參考所需的整個 Pull Request 堆疊,包括編譯器補丁、ocaml-uideps、Dune、Merlin 和 ocaml-lsp,都已重新調整基底,以包含最新的編譯器變更。

這使得我們發現了一些關於 first-class 模組和別名的問題。別名追蹤也已新增至形狀 (shapes) 中,這對於出現次數區分相同模組的不同別名是必要的。

活動

[Merlin] 提升 Merlin 的效能

貢獻者:@pitag (Tarides), @3Rafal (Tarides), @vds (Tarides), @let-def (Tarides)

為了提升 Merlin 的效能,我們持續進行 Merlin 基準測試和錯誤回歸 CI 管線的工作。merl-an 中已修復了幾個問題,以穩定 Merlin 中開啟的基準測試 CI 和錯誤回歸 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

活動