平台電子報:2023 年 5 月
歡迎來到 OCaml 平台電子報的第二期!
我們很高興與您分享我們在五月份為改進 OCaml 開發者體驗,在 OCaml 平台上所做的工作。與先前的更新類似,本期內容圍繞著我們目前正在探索或改進的開發工作流程。
本月重點是發布 OCaml 平台的工作進度路線圖。我們發布它是為了開始收集社群對於平台設計原則和角色設定的回饋。這些回饋將用於制定我們未來三年的計畫。我們已經收到了許多非常有見地且具有建設性的回饋,在接下來的幾週和幾個月裡,我們將根據這些回饋修訂路線圖。下一步,我們將分享擬議的開發者工作流程的第一個版本。
本月的另一個重要里程碑是 Dune 3.8 的發布。此版本支援使用 Melange 將 OCaml 專案編譯為 JavaScript,而 Melange 在本月也迎來了它的 第一個穩定版本!它還包含一些已經開發了一段時間的重要功能和改進,例如新的 concurrent
動作和 Coq 規則的組合。
最後一個重點是,opam 2.2 的第一個 alpha 版本也即將推出。這個月在準備發布時出現了一些意料之外的問題,但 opam 團隊仍然計畫在六月發布。
還有許多其他非常令人興奮的工作要談,所以讓我們深入探討一下吧!
版本發布
以下是我們在四月份發布的平台工具新版本。請查看 OCaml 更新日誌,閱讀公告和功能重點!
建置套件
[Dune] 在 Dune 中探索套件管理
貢獻者:@rgrinberg (Tarides)、@Leonidas-from-XIV (Tarides)、@gridbugs (Tarides)、@kit-ty-kate (Tarides)
在 Dune 中新增套件管理支援的探索仍在繼續。這個月在多個方面取得了進展
- 已經開始了求解器方面的工作,包括供應 opam-0install 求解器,用於在產生 Dune 鎖定檔時求解相依性。鎖定檔產生的工作進度實作可在
main
分支上取得。 - 原始碼樹處理已經過重構,最終允許使用多個特定於內容的鎖定檔。
- 原始碼擷取實作已經過改進,包括校驗和處理和更好的擷取 API。這帶來了一個更清晰的介面,用於建置 opam 套件。
- 建置 opam 套件的原型工作仍在繼續,其中包括新增了新的
Patch
和Substitute
動作。這增加了現在可以建置的 opam 套件子集。
活動
- 合併了新增建置 opam 套件能力的 PR — ocaml/dune#7626。
- 在鎖定目錄重新產生中新增了安全機制 — ocaml/dune#7832。
- 引入了在建置規則中設定環境的功能 — ocaml/dune#7742。
- 合併了新增保守鎖定檔產生的 PR — ocaml/dune#7732。
- 簡化了 cookie 中的項目 — ocaml/dune#7701。
- 修復了原始碼複本的位置處理 — ocaml/dune#7697。
- 改善了校驗和處理 — ocaml/dune#7696。
- 測試了安裝動作 — ocaml/dune#7695。
- 版本化鎖定目錄格式 — ocaml/dune#7693。
- 為擷取建立了一個更好的 API — ocaml/dune#7675。
- 供應了 opam-0install — ocaml/dune#7668。
- 開啟了一個 PR,新增了在校驗和驗證失敗時傳回擷取的校驗和的功能 — ocaml/dune#5552。
- 進行了重構,允許將自訂執行器傳遞給
OpamStd.Sys
— ocaml/dune#5549。
[opam] opam 2.2 中對 Windows 的原生支援
貢獻者:@rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@emillon (Tarides)、@Leonidas-from-XIV (Tarides)
在整個五月份,opam 團隊都專注於審查和修復 2.2 alpha 版本剩餘的 PR。這項工作除錯並解決了測試期間發現的問題,而團隊現在正在處理少數幾個待審查的 PR。
還推出了一個新的版本,opam 2.1.5 點版本,從即將推出的 2.2 版本中回溯了一些修復,以及一個重要的安全性修復。您可以在 OCaml 更新日誌上閱讀公告。
活動
- 在初始化期間內部安裝 cygwin — ocaml/opam#5545。
- 將 cygwin 支援新增至 depexts — ocaml/opam#5542。
- 實作完全可還原的環境更新 — ocaml/opam#5417。
- 一些 windows shell 更新 — ocaml/opam#5541。
- 在核心中提供更好的 cygwin 支援 — ocaml/opam#5543。
- init:偵測本機 cygwin 安裝 — ocaml/opam#5544。
- init:內部安裝 cygwin - ocaml/opam#5545。
- 使用 OCaml 程式碼來複製/移動/移除目錄,而不是 unix 指令 — ocaml/opam#4823。
- 修復 opam 安裝/移除/升級/重新安裝中的效能衰退 — ocaml/opam#5503。
[Dune] 改善 Dune 的文件
貢獻者:@emillon (Tarides)
兩個 Dune 函式庫現在在 OCaml.org 上都有文件頁面:dune-build-info 和 dune-configurator 現在都在它們的套件頁面上直接提供 API 文件,而對於 Dune 本身,則已包含其官方文件的連結。
Dune Sphinx 網域新增了一個新的 action:
指令,允許改善交叉參照。最後,舊的 .org
格式 Dune 範例文件已轉換為 Markdown,以進一步標準化文件格式。
文件改進已作為 Dune 3.8 版本的一部分發布。新的結構和許多改進可以在 Dune 文件上檢視。
活動
- 將未分類的頁面放置在最合適的標頭下 — ocaml/dune#7683。
- 將範例中的 README.org 轉換為 markdown — ocaml/dune#7738。
- 新增了 dune-build-info 的 API 文件 — ocaml/dune#7739。
- 將讀者導向 odoc 中的官方文件 — ocaml/dune#7746。
- 為 configurator 新增了 odoc 索引 — ocaml/dune#7749。
- 更正了
(map_workspace_root)
的文件 — ocaml/dune#7775。 - 使用特殊指令擴充了動作文件 — ocaml/dune#7804。
[Dune] 組合已安裝的 Coq 理論
貢獻者:@Alizter 和 @ejgallego (IRIF)
上個月,合併了 支援使用 Dune 組合 Coq 理論的 PR。
現在在 Dune 3.8.0 的版本中可用!從現在開始,Coq 使用者可以利用 Dune 來建置 Coq 專案,即使它們依賴於使用其他建置系統的 Coq 專案!
[Dune] 同時執行動作
貢獻者:@Alizter 和 @hhugo (Nomadic Labs)
上個月,有幾個 PR 合併到了 Dune 中,以 新增一個新的並行動作,並利用它來 同時執行內嵌測試。
這些修補程式是 Dune 3.8.0 版本的一部分,從現在開始,您可以在 Dune 規則中使用新的 concurrent
動作
(rule
(action
(concurrent
(run <prog> <args>)
(run <prog> <args>))))
[Dune] 在大型程式碼庫上基準測試 Dune
貢獻者:@gridbugs (Tarides), @Leonidas-from-XIV (Tarides)
Dune 基準測試結果的品質已獲得提升,透過多次執行短測試來平均消除短測試中出現的變異。此增強功能旨在減少環境中固有的背景雜訊影響。
Dune 基準測試還揭露了兩個損壞的套件:ppx_rapper (3.1.0) 的產出物雜湊已更新,因為它已就地變更,並且 ocamlcodoc 產出物已新增至 opam-source-archives,因為原始 URL 已無法存取。
此外,基準測試所揭露的 dune-rpc-lwt
中的堆疊溢位問題也已修復。
活動
- 多次執行短 monorepo 基準測試 -- ocaml/dune#7798。
- 修復 monorepo 基準測試中的問題 -- ocaml/dune#7786。
- 已將 ocamlcodoc 新增至 opam-source-archives,並已更新 opam-repository。
- 針對
ppx_rapper.3.1.0
套件就地變更的問題,開啟了議題。
編譯為 JavaScript
[Dune] 在 Dune 中使用 Melange 編譯為 JavaScript
貢獻者:@anmonteiro, @jchavarri (Ahrefs), @rgrinberg (Tarides)
我們很高興看到 Dune 3.8.0 和 Melange 1.0 本月聯合發布!
Melange 是一個從 OCaml 編譯為 JavaScript 的編譯器,其願景是維持與 OCaml 的相容性,並在現代 JavaScript 生態系統中提供最佳的 OCaml 體驗。
請參閱 Dune 文件 和 Melange 文件,瞭解如何開始使用 Melange 將您的 OCaml 專案編譯為 JavaScript。
您也可以參考 範本 開始使用。
產生文件
odoc
新增搜尋功能
[Odoc] 為 貢獻者:@panglesd (Tarides), @EmileTrotignon (Tarides), @trefis (Tarides)
odoc 團隊正在穩步進展,將搜尋列新增至 odoc 產生的文件中。
在五月,設計了 odoc 和搜尋引擎之間互動的介面。Sherlodoc 現在可以在瀏覽器中執行,已更新為使用 odoc 公開的新介面。sherlodoc
本身也進行了改進,以啟用搜尋建構函式和記錄欄位,以及在 docstrings 中搜尋。所有這些額外的索引所產生的較大資料庫促使人們進行效能分析並實施最佳化。
預期六月的更新,可以查看幾天前開啟的 odoc PR。
同時,開發了一個在 odoc 中計算出現次數的 工作原型。目的是在產生的索引中新增使用統計資訊,以便搜尋引擎可以使用它來排序搜尋結果。它也將允許在三月合併的 呈現的原始程式碼中新增「跳至文件」功能。
odoc
中的表格
[Odoc] 支援 貢獻者:@gpetiot (Tarides), @panglesd (Tarides), @Julow (Tarides), @jonludlam (Tarides), @trefis (Tarides)
為在 Odoc 中建立表格新增新語法的 PR 已合併!
提醒一下,此新功能將允許使用類似 Markdown 的語法建立表格
{t
a | b | c | d
---|:--|--:|:-:
a | b | c | d
}
Odoc 將為不同的後端產生表格,包括 LaTex 和 HTML。此新語法將在即將發布的 Odoc 2.3.0 中提供。敬請期待!
活動
- 合併了在 odoc-parser 中新增表格新語法的 PR -- ocaml-doc/odoc-parser#11
- 合併了為 odoc 新增表格支援的 PR -- ocaml/odoc#893
編輯和重構程式碼
[Merlin] 在 Merlin 中支援專案範圍的參考
貢獻者:@voodoos (Tarides), @let-def (Tarides)
由於 Merlin 團隊專注於效能改進、修復使用者回報的錯誤、與 OCaml 5.1 的相容性以及 Merlin 4.9 的發布,本月在支援 Merlin 中的專案範圍發生次數方面沒有取得太多進展
剩餘的問題(例如模組別名遍歷和索引篩選)已進行討論,並將很快開始實施確定的解決方案。
[Merlin] 改善 Merlin 的效能
貢獻者:@pitag-ha (Tarides), @3Rafal (Tarides), @voodoos (Tarides), @let-def (Tarides)
Merlin 基準測試工作的最後階段正在進行中,Merlin 團隊專注於使用 current-bench
將開發的基準測試工具整合到 Merlin 的 CI 中。已在 merl-an
上開啟 PR,以新增新的 current-bench 相容後端,並且已開始將記憶體使用資訊新增至 Merlin 的遙測。
在效能最佳化方面,Merlin 中的 PPX 階段快取已完成並合併。針對使用 Merlin 的工具如何從新的 PPX 快取中獲益的問題,已在上游開啟了議題。
活動
- 在
merl-an
中實作了current-bench
後端的草圖 -- pitag-ha/merl-an#2。 - 已開始將記憶體使用資訊新增至 Merlin 的遙測。
- 已完成並合併 PPX 階段快取 PR -- ocaml/merlin#1584。
- 已在
dune
和ocaml-lsp-server
中開啟議題,以記錄啟用 PPX 階段快取的必要條件- 在 Dune 中:
dune ocaml-merlin
:啟用 PPX 階段快取 -- ocaml/dune#7731。 - 在 OCaml LSP 中:處理 Merlin 的 PPX 階段快取 -- ocaml/ocaml-lsp#1095。
- 在 Dune 中:
- 識別並修復與
(F A).t
語法相關的記憶體「洩漏」,導致無法控制的記憶體化表成長 -- ocaml/merlin#1609。
[OCaml LSP] 在 Windows 上使用 Dune RPC
貢獻者:@nojb (LexiFi)
在 5 月,在 Dune 3.7.0 中引入的 Windows 上的監看模式支援的基礎上,合併了 Dune 和 OCaml LSP 中的一些修補程式,允許 OCaml LSP 使用 Dune RPC。目的是讓 Windows 使用者能夠利用 Dune RPC,並在 Dune 以監看模式執行時,在編輯器中接收建置狀態和更完整的建置錯誤。
Dune 3.8.0 已發布,其中包含上述修補程式,OCaml LSP 的版本將在未來幾週內發布。
[OCaml LSP] 將 OCaml LSP 的 Merlin 分支上游化
貢獻者:@voodoos (Tarides), @3Rafal (Tarides)
將 OCaml LSP 的 merlin 分支上游化的工作繼續進行。Merlin 中必要的修補程式已審查並合併。使用 Merlin 作為 OCaml LSP 中程式庫的 PR 的工作也繼續進行。
活動
- 已審查並合併啟用可設定的 Merlin PP/PPX 生成的 PR -- ocaml/merlin#1585。
- 繼續處理在 LSP 中使用 Merlin 作為程式庫的 PR -- ocaml/ocaml-lsp#1070。
格式化程式碼
ocp-indent
之間的差距
[OCamlFormat] 縮小 OCamlFormat 和 貢獻者:@gpetiot (Tarides) 和 @EmileTrotignon (Tarides), @Julow (Tarides), @ceastlund (Jane Street)
持續努力調整 janestreet
設定檔,使其與 ocp-indent
的輸出更好地對齊。儘管在格式化「cinaps」註解方面遇到困難,但 5 月取得了相當大的進展,並且工作將在 6 月繼續進行。
活動
- 對齊模式別名 -- ocaml-ppx/ocamlformat#2359
- 僅在
fun
/function
從 apply 的第一行開始時將其停靠 -- ocaml-ppx/ocamlformat#2362 - 對齊模組參數 -- ocaml-ppx/ocamlformat#2363
- 刪除空註解中的額外換行符號 -- ocaml-ppx/ocamlformat#2365