平台新聞稿: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#8093- 使用 Dune 建置套件時的 Opam 變數內插 -- ocaml/dune#8094
- 來自
lockdir
中opam-repository
的每個套件檔案 -- ocaml/dune#8095 - Dune
lockdir
中的 Opambuild
和install
命令 -- ocaml/dune#8154
lockdir
中的條件相依性 -- ocaml/dune#8050- 一旦合併後,一系列提交即可準備好進入新的 PR,這將擴展到允許使用者在建置內容中對系統
env vars
設定限制,並一次解決一系列系統的問題。例如,這可用於產生在 macOS 和 Linux 上都可運作的lockdir
,或在 Linux 電腦上執行時產生 macOS 的lockdir
。
- 一旦合併後,一系列提交即可準備好進入新的 PR,這將擴展到允許使用者在建置內容中對系統
- 求解器可以在單個
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
範本建立檔案,以符合 opamsubsts
欄位/功能 -- ocaml/dune#8225 - 在建立套件求解的可變環境方面取得進展
- 在求解期間設定
opam-version
變數 -- ocaml/dune#8267 - 求解時不要警告未定義的 opam 變數 -- ocaml/dune#8275
- 在求解期間設定
[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 monitor
:連接到正在執行的 Dune 建置
[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
中搜尋 -- ocaml/odoc#972 - 收集出現次數資訊 -- ocaml/odoc#976
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)的上游化。
活動
- 編譯器支援專案範圍的出現 -- 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-ha (Tarides), @3Rafal (Tarides), @voodoos (Tarides), @let-def (Tarides)
上個月,我們報告了 持續基準測試 Merlin 的 PR 已合併。下一個階段涉及實作模糊測試 PR 以監控行為回歸。在 7 月,引入了 此行為回歸 CI 的 RFC,並附帶初始實作,以討論設計的權衡取捨。
一旦合併,Merlin 的 CI 系統的基礎工作將完成,Merlin 團隊打算將重點轉移到效能最佳化。
活動
- 開啟了行為 CI 的 RFC -- ocaml/merlin#1657
- 改善了
merl-an
中的錯誤發現 -- pitag-ha/merl-an#33 - 為行為 CI 改進了
merl-an
- 將
-index 0
新增至類型封閉 cmd -- pitag-ha/merl-an#30 - 從 locate cmd 中移除
-index 0
--pitag-ha/merl-an#31 - 改進了 [behavior] cmd -- pitag-ha/merl-an#34
- Behavior cmd cat 資料 -- pitag-ha/merl-an#37
- 只允許一個 Merlin 版本 -- pitag-ha/merl-an#40
- 提升效能 -- pitag-ha/merl-an#41
- 將