平台電子報: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
- [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 3.8.1
- Dune 3.8.2
- Dune 3.8.3
- Dune 3.9.0
- opam 2.2.0~alpha
- OCaml LSP 1.16.1
- OCaml LSP 1.16.2
- Ppxlib 0.30.0
- Dune-release 2.0.0
建置套件
[Dune] 探索 Dune 中的套件管理
貢獻者:@rgrinberg (Tarides)、@Leonidas (Tarides)、@gridbugs (Tarides)、@kit-ty-kate (Tarides)
本月在 Dune lockdirs 方面取得了顯著的進展,團隊正接近能夠鎖定和建置簡單的 opam 套件。
改進包括
- 求解器對 opam 標記(
with-test
和with-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-mingw
和 dra27/opam-repository
上游合併修補程式。這將在 opam 2.2 的最終版本發布之前發生,因此 opam init
可以與 Windows 上游的 opam-repository
搭配使用。
Windows 支援並非此版本中唯一令人興奮的功能。若要瞭解 opam 2.2 中包含的其他重要功能,請閱讀 公告,並隨時在 Discuss 帖子上分享您的回饋。
活動
- Windows 支援
- 其他改進
- 發布管理
- Alpha 版本後 PR
- 安全性稽核
[Dune] 改善 Dune 的文件
貢獻者:@emillon (Tarides)
增強 Dune 文件的努力仍在持續進行。過去的努力著重於文件的高階組織,而新的結構已在 Dune 3.8 版本中發布。本月,對文件本身的內容進行了各種改進。
活動
- 將 XREF 新增至動作 -- ocaml/dune#7842
- 可以產生
.opam.template
檔案 -- ocaml/dune#7911 - 填補參考文件中的空白,並將其他文件新增至 ocaml.org (dune-glob、xdg)。
- 新增關於別名的參考資訊 -- ocaml/dune#7945
- 改善 XDG 的 API 文件 -- ocaml/dune#7958
- 為
dune-glob
新增 index.mld -- ocaml/dune#7989
dune show
命令
[Dune] 新的 貢獻者:@Alizter、@rgrinberg (Tarides)、@snowleopard (Jane Street)
新增了新的 dune show
命令群組,作為現有 dune describe
命令的別名。
新的命令群組隨附兩個新命令 dune show targets
和 dune show aliases
,以增強 Dune 專案的內省功能和可用 Dune 命令的可探索性。
dune show targets [OPTION]… [DIR]…
的靈感來自ls
,並列印給定目錄中可用的目標。dune show aliases [OPTION]… [DIR]…
會列印給定目錄中可用的別名。
歡迎對這些新命令提供回饋,並可在 Dune 的問題追蹤器上分享。
活動
- 建立
dune show
命令群組 -- ocaml/dune#7946 dune show targets
和dune show aliases
命令 -- ocaml/dune#7946
產生文件
odoc
] 將搜尋功能新增至 odoc
[貢獻者:@panglesd (Tarides)、@EmileTrotignon (Tarides)、@trefis (Tarides)
上個月開始針對 sherlodoc 進行的效能分析與優化工作已見成效:資料庫大小已大幅縮減,索引時間也顯著減少。
此外,在 OCaml.org 團隊的建議下,我們針對搜尋功能的使用者介面進行了全面改版。
接下來,我們將注意力轉向更廣泛地測試(和除錯)索引/搜尋功能。
另外,在輸出搜尋索引的使用統計數據方面也取得了進展。具體來說,我們將出現次數的支援與原始碼渲染分離,並新增了對值、模組、類型、模組類型、類別類型和建構子的出現次數進行計數的支援。
不同的 Pull Request 已接近合併準備狀態。下一步將調整 Dune 和 OCaml.org 的驅動程式,以使 odoc
的使用者可以使用此功能。
活動
- 在
odoc
中支援搜尋功能 -- ocaml/odoc#972 - 收集出現次數資訊 -- ocaml/odoc#976
- 為基本文字區塊(如段落和程式碼區塊)新增標籤 -- ocaml/odoc#974
程式碼編輯和重構
[Merlin] Merlin 中對專案範圍參考的支援
貢獻者:@vds (Tarides), @let-def (Tarides)
專案範圍參考所需的整個 Pull Request 堆疊,包括編譯器補丁、ocaml-uideps
、Dune、Merlin 和 ocaml-lsp
,都已重新調整基底,以包含最新的編譯器變更。
這使得我們發現了一些關於 first-class 模組和別名的問題。別名追蹤也已新增至形狀 (shapes) 中,這對於出現次數區分相同模組的不同別名是必要的。
活動
- 編譯器對專案範圍出現次數的支援 -- voodoos/ocaml#1
- 使用 CMT 檔案中的新編譯資訊來輸出建置和聚合索引 -- voodoos/ocaml-uideps#5
- Dune 編排索引生成 -- voodoos/dune#1
- 使用新的 CMT 資訊為專案範圍的出現次數提供緩衝區出現次數和索引 -- voodoos/merlin#7
- 在
ocaml-lsp
中支援專案範圍的出現次數 -- voodoos/ocaml-lsp#1
[Merlin] 提升 Merlin 的效能
貢獻者:@pitag (Tarides), @3Rafal (Tarides), @vds (Tarides), @let-def (Tarides)
為了提升 Merlin 的效能,我們持續進行 Merlin 基準測試和錯誤回歸 CI 管線的工作。merl-an
中已修復了幾個問題,以穩定 Merlin 中開啟的基準測試 CI 和錯誤回歸 CI 的概念驗證 (POC)。
基準測試 CI 已於 7 月初合併,因此 Merlin 現在正持續進行效能回歸的基準測試。
下個月,我們將繼續實驗錯誤回歸 CI 的最佳方法,然後再重新聚焦於具體的效能改進。
活動
- Merlin 基準測試 CI -- ocaml/merlin#1640
merl-an
的錯誤回歸後端 -- pitag-ha/merl-an#14- Merlin 行為回歸 CI -- ocaml/merlin#1642
[OCaml LSP] 將 OCaml LSP 的 Merlin 分支上游化
貢獻者:@voodoos (Tarides), @3Rafal (Tarides)
移除 OCaml LSP 的 Merlin 分支的 PR 已合併!
合併後,新增了與 OCaml 5.1 相容的補丁,並發布了 OCaml LSP 1.16.1。
活動
- 將 Merlin 作為程式庫使用 -- ocaml-lsp#1070
- 與 OCaml 5.1 相容 -- ocaml-lsp#1150
[OCaml LSP] 提取程式碼動作
貢獻者:@jfeser, @rgrinberg (Tarides)
OCaml LSP 1.16.1 為 LSP 引入了兩種新的程式碼動作類型:Extract local
和 Extract 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#870
[OCaml LSP] 支援內嵌提示
貢獻者:@jfeser, @rgrinberg (Tarides), @vds (Tarides)
LSP 3.17 規格引入了內嵌提示的功能,這項增強功能可讓編輯器將註解整合到文字中,以便顯示參數名稱、類型提示等等。
本月,我們開始在 OCaml LSP 伺服器中實作內嵌提示。目前,此 Pull Request 正在審查中,並計畫將其整合到後續的次要版本 OCaml LSP 1.17.0 中。
活動
- 初步的內嵌提示支援 -- ocaml-lsp#1159
程式碼格式化
ocp-indent
之間的差距
[OCamlFormat] 縮小 OCamlFormat 和 貢獻者:@gpetiot (Tarides) 和 @EmileTrotignon (Tarides), @Julow (Tarides), @ceastlund (Jane Street)
為了使 OCamlFormat 的 janestreet
設定檔更接近 ocp-indent
的輸出,我們在幾個月前啟動了這項工作,並在本月持續進行。本月的大部分變更都圍繞著註解的處理。
OCamlFormat 團隊也正在準備發布 OCamlFormat 0.26.0,其中將包含過去幾個月實作的所有錯誤修復和改進。如果您想了解這會帶來哪些格式變更,請查看一些預覽 PR
活動
- 重構註解的處理 -- ocaml-ppx/ocamlformat#2371
- 不要混淆註解和文件字串 -- ocaml-ppx/ocamlformat#2372
- 停用程式碼區塊中已棄用的警示 -- ocaml-ppx/ocamlformat#2373
- 不要逸出程式碼跨度中平衡的括號 -- ocaml-ppx/ocamlformat#2376
- 不要逸出單字中間的 @ -- ocaml-ppx/ocamlformat#2377
- 在未包裝的程式碼跨度之前不應有不必要的斷行 -- ocaml-ppx/ocamlformat#2378
- 保留文件字串中的空白行 -- ocaml-ppx/ocamlformat#2379