平台新聞稿:2023 年 7 月

歡迎來到 OCaml 平台新聞稿的第四期!

本期帶來了 7 月份為改善 OCaml 開發人員體驗而對 OCaml 平台所做的最新改進。如同先前的更新,本新聞稿重點介紹目前正在探索或強化的開發工作流程。

由於我們正進入歐洲的夏季,本期內容比前幾期略短。儘管如此,本月在 Dune 中對套件管理的支持方面取得了一些重大進展,只剩下少數 剩餘的阻礙即可建置簡單的 opam 套件。我們也看到了眾所期待的 opam 2.2 第二個 alpha 版本的發布,其中包含 Windows 上 Cygwin 的自動安裝,允許使用者僅使用 opam 的安裝腳本即可安裝完整的開發環境!

版本發布

以下是本月發布的平台工具的所有新版本。請查看OCaml 更新日誌以閱讀版本發布公告!

建置套件

[Dune] 探索 Dune 中的套件管理

貢獻者:@rgrinberg (Tarides)、@Leonidas-from-XIV (Tarides)、@gridbugs (Tarides)、@kit-ty-kate (Tarides)

7 月,Dune 套件管理團隊致力於自動下載 opam-repository,以確保在未指定其他 opam-repository 來源時,可以隨時用於鎖定。

已實作 Dune 版本的 opam substs 支援,並在展開求解器中的 opam 套件篩選器時,增強了變數環境。

還新增了對系統變數的支援,可以從工作區檔案讀取或從目前的系統推斷。值得注意的是,未設定的系統變數現在被求解器視為萬用字元,允許產生適用於一系列系統的單個 lockdir。此變更消除了不同系統(例如 macOS 和 Linux)需要不同 lockdirs 的情況。

活動

  • 新增欄位以指示 OCaml 套件 -- ocaml/dune#8079
  • 建立問題以追蹤在 Dune 中建置 opam 套件的剩餘工作,以及中繼問題
  • lockdir 中的條件相依性 -- ocaml/dune#8050
    • 一旦合併後,一系列提交即可準備好進入新的 PR,這將擴展到允許使用者在建置內容中對系統 env vars 設定限制,並一次解決一系列系統的問題。例如,這可用於產生在 macOS 和 Linux 上都可運作的 lockdir,或在 Linux 電腦上執行時產生 macOS 的 lockdir
  • 求解器可以在單個 lockdir 中解決多個環境的問題 -- ocaml/dune#8188
    • 這將允許使用者在多個不同的環境(例如,不同的作業系統)中使用單個 lockdir
  • 實作 opam-repository 的自動下載,並可選擇使用現有的資料夾或自訂預設 URL(預設為 opam-repository tarball),從而無需依賴切換的 opam-repository 並移除對它的支援,在某種程度上簡化了 0install 求解器的執行方式 -- ocaml/dune#8105
  • 透過將 opam API 中的函式與 Dune 規則連接起來,實作 opam 中作為 Dune 一部分之取代支援的工作 -- ocaml/dune#8225
  • .in 範本建立檔案,以符合 opam substs 欄位/功能 -- ocaml/dune#8225
  • 在建立套件求解的可變環境方面取得進展

[opam] opam 2.2 中對 Windows 的原生支援

貢獻者:@rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@AltGr (OCamlPro)

上個月發布了備受期待的 opam 2.2 第一個 alpha 版本。本月發布了 opam 2.2 的第二個 alpha 版本。

雖然第一個 alpha 版本引入了原生的 Windows 相容性,但第二個 alpha 版本為 Windows 提供了更簡單的初始化,消除了對預先存在的 Cygwin 類 UNIX 環境的依賴。相反,opam 現在在初始化期間提供了嵌入式的、完全管理的 Cygwin 安裝。

請查看版本公告以了解更多詳細資訊,並加入Discuss上的討論以分享您的意見回饋。

活動

  • opam init 內部預設自動安裝 Cygwin,而不是要求使用者手動安裝 -- opam#5545

[Dune] dune monitor:連接到正在執行的 Dune 建置

貢獻者:@Alizter

本月,@Alizter 開始研究新的 dune monitor 命令,該命令會連接到以監看模式執行的 Dune 建置(透過 Dune RPC),其行為就像您執行 dune build -w 一樣。

未來,計畫將 dune monitor 合併到 dune build 命令中,因此執行建置預設會產生 RPC 伺服器,而任何後續的建置都會連接到 RPC 伺服器以顯示建置資訊。

這在 Dune 套件管理的背景下尤其令人興奮。編輯器將能夠連接到正在執行的 Dune RPC 伺服器(直接或透過 OCaml LSP),以提供相關的編輯器功能。使用 dune monitor,您可以為同一專案開啟的編輯器數量將沒有限制!

由於近期在Dune 終端 UI 上所做的工作,預期在不久的將來,執行多個建置命令的體驗將會大幅改善!

產生文件

[odoc]odoc 新增搜尋功能

貢獻者:@panglesd (Tarides)、@EmileTrotignon (Tarides)、@trefis (Tarides)

odoc 團隊持續在從 odoc 產生搜尋索引,以及為 HTML 後端新增搜尋功能方面取得進展。

在測試期間發現了一些問題並已解決,並且 Sherlodoc 已更新為與最新版本的 odoc 相容,現在該版本提供了對資產的基本支援,用於選取搜尋 JavaScript 指令碼檔案。

活動

[odoc] odoc 中圖片和資源的語法

貢獻者:@panglesd (Tarides)

為了讓 odoc 適用於建立豐富的手冊,odoc 團隊開始研究新增對圖片和資源的特殊支援!此倡議將把圖片支援引入 OCaml.org 的中央套件文件。

在未來幾週內,將在 7 月份開啟的RFC 中討論語法和設計,一旦對設計達成共識,就會開始實作。

活動

  • 實作資產參考(使用參考中的 asset-* 限定詞),以及它們的解析(請參閱分支)。
  • 開啟了一個問題來討論圖片的語法,並附上初始提案。 -- ocaml/odoc#985

編輯和重構程式碼

[Merlin] 在 Merlin 中支援專案範圍的參照

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

這個月,關於專案範圍參照的工作重點在於改善別名處理、修復與 UID 相關的問題,以及增強模組和建構函式的行為。

現在每個 Merlin 測試都通過了(:tada:!),因此團隊打算專注於將編譯器修補程式上游化,這反過來將解鎖其餘堆疊(即 Merlin、Dune 和 OCaml LSP)的上游化。

活動

[Merlin] 提升 Merlin 的效能

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

上個月,我們報告了 持續基準測試 Merlin 的 PR 已合併。下一個階段涉及實作模糊測試 PR 以監控行為回歸。在 7 月,引入了 此行為回歸 CI 的 RFC,並附帶初始實作,以討論設計的權衡取捨。

一旦合併,Merlin 的 CI 系統的基礎工作將完成,Merlin 團隊打算將重點轉移到效能最佳化。

活動