平台新聞稿:2023 年 11 月和 12 月
歡迎來到 OCaml 平台新聞稿的第八版!
在這 11 月和 12 月的版本中,我們很高興為您帶來 OCaml 平台的最新資訊,延續我們在先前版本中重點介紹最新發展的傳統。若要了解我們的前進方向,特別是關於開發工作流程和使用者體驗的改進,請查看我們的路線圖。
重點
odoc
團隊正開始著手改善odoc
的效能。在發布重要功能(包括連結到原始碼、表格語法以及最近對搜尋的支援)後,他們正將重點轉向整合完整的文檔生成堆疊(包括 Dune 規則和與 OCaml.org 套件文檔的整合)並改進效能。- opam 2.2~alpha3 已發布!這是最後一個 alpha 版本,opam 團隊計畫在下一個週期開始 beta 版本發布。
- 預計在 1 月更新中,Merlin 專案範圍參考所需的編譯器 PR 已合併!這將是 OCaml 5.2 的一部分,這表示從下一個編譯器版本開始,OCaml 開發人員將能夠在其專案中查詢專案範圍的參考(以及對專案範圍重新命名的有限支援!)。閱讀此處以了解如何測試此功能。
版本
W4)
[Dune] 探索 Dune 中的套件管理 (貢獻者: @rgrinberg (Tarides)、@Leonidas-from-XIV (Tarides)、@gridbugs (Tarides)、@kit-ty-kate (Tarides)、@Alizter
原因: 將 OCaml 工具統一在單一命令列下,以用於所有開發工作流程。這解決了社群回報的最重要痛點之一。
內容: 使用 opam 作為函式庫,將套件管理整合到 Dune 中的原型。我們將引入 dune pkg lock
命令來產生鎖定檔,並增強 dune build
以處理鎖定檔中的相依性。更多詳細資訊請參閱Dune RFC。
活動
- 引入鎖定機制,以防止多個儲存庫中的衝突,並修復了 Dune 鎖定程式碼中的錯誤。-- ocaml/dune#9140
- 啟用無需網路連線的專案鎖定,使用本機快取的
opam-repository
。-- ocaml/dune#9202 - 增強了對具有非標準內容(非檔案物件)的
opam-repositories
的處理。-- ocaml/dune#9352 - 新增使用者可以設定任意變數的功能,opam 套件在解決專案的相依性時可以參考這些變數。這讓使用者可以更好地控制解析器所做的決策,以及其專案最終在其
lockdir
中擁有的相依性。-- ocaml/dune#9325 - 確保
lockdir
包含本機套件的所有相依性,以保持一致性。這可防止 Dune 向在建立lockdir
後變更專案相依性的使用者顯示不一致的資訊。相反地,系統會提示他們重新計算其lockdir
。-- ocaml/dune#9156 - 能夠偵測
lockdir
中哪些相依性僅在建置測試時需要。這對於允許使用者跳過下載和建置僅在執行測試時才需要的套件而言是必要的。-- ocaml/dune#9095 - 改進對 Windows 的支援,重點在於更好地整合 Curl 和 opam 函式庫以適用於 Windows 架構。-- ocaml/dune#9252、ocaml/dune#9048
- 完善 Dune 套件管理中的內容/鎖定檔處理。-- ocaml/dune#9343
- 完善內容/鎖定檔處理。之前每個內容都有一個相關聯的鎖定檔,因此鎖定檔是透過內容引數選取的。現在,內容中間人已被移除,使用者透過指定鎖定檔本身來選取鎖定檔。這適用於大多數與 pkg 相關的命令。-- ocaml/dune#9343
- 新增對 opam 檔案中
conflicts
欄位的支援 -- ocaml/dune#9340 - 研究新增對 deptops 的支援的解決方案 -- ocaml/dune#9430
- 寫入建立鎖定檔的程序的 PID ocaml/dune#9295,以便能夠輕鬆判斷哪個程序持有修訂儲存鎖定
- 避免 Git 翻譯其 CLI ocaml/dune#9390。由於我們在幕後使用 Git 二進位檔,因此具有不同地區設定的使用者可能會取得翻譯過的 Git 輸出。由於我們的 Git 輸出未顯示給使用者,因此我們停用翻譯。
- 移除
opam-repository-url
選項 ocaml/dune#9373 移除所有處理儲存庫的 CLI 選項。現在,所有opam-repositories
都會在dune-workspace
檔案中進行控制。 - 支援為儲存庫指定特定分支/提交 ocaml/dune#9241 新增對指定分支和提交作為
opam-repository
來源的支援,因此使用者可以修正opam-repository
的一個特定狀態 - 啟用簽出標籤 ocaml/dune#9471 新增與上述相同的支援,但適用於標籤。它透過在每個遠端命名空間中儲存標籤來執行此操作,因此其運作方式非常像分支。
- 實作透過 Git 下載來源 ocaml/dune#9506 啟用透過修訂儲存複製來源目錄,因此在處理來自相同儲存庫的多個專案時,可以快取大多數提交等。
- 即使存在標籤,也能正確讀取主要分支 ocaml/dune#9549 修復了在存在命名空間標籤時,判斷追蹤分支的程式碼會感到困惑的問題。
- Dune 將計算其 opam 中繼資料中尚未有總和檢查碼的套件鎖定檔總和檢查碼。-- ocaml/dune#9384
- Dune 專案的套件中繼資料可以從
.opam
檔案讀取,而不是從dune-project
讀取 -- ocaml/dune#9418 - 支援解析器 opam 檔案中的衝突類別 -- ocaml/dune#9442
- 能夠新增額外的限制以饋送解析器 -- ocaml/dune#9337
W5)
[opam] opam 2.2 中對 Windows 的原生支援 (貢獻者: @rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@AltGr (OCamlPro)
原因: 透過整合原生 opam 和 opam-repository
支援來增強 OCaml 在 Windows 上的可行性,從而培育更大的社群和更多 Windows 友善的套件。
內容: 發布具有原生 Windows 支援的 opam 2.2,使官方 opam-repository
可在 Windows 平台上使用。
活動
- 我們已發布 opam 2.2.0~alpha3,這是過去 4 個月工作的結晶。此版本在其他修正和改進中,在 opam 檔案中新增了一種方法,用於指定 Windows 上
setenv:
和envbuild:
欄位的路徑環境變數重寫規則。-- #5636 - 產生靜態二進位檔以產生 Windows 二進位檔 -- #5680
- 修正 cygwin 上
opam env
的歸位字元 -- #5715 - 處理在 Windows 上 opam 初始化時要使用哪個 Git -- #5718
- 我們還修復了 Windows 上的一些問題
odoc
] 新增 odoc
的搜尋功能 (W25)
[貢獻者: @panglesd (Tarides)、@EmileTrotignon (Tarides)、@julow (Tarides)、@jonludlam (Tarides)
原因: 透過提供進階搜尋選項(如基於類型的查詢)來改進 OCaml 套件文檔(無論是在本機還是在 OCaml.org 上)的可用性和可導航性。
內容: 在 odoc
中實作搜尋引擎介面,並附帶 UI 和搜尋索引。此外,我們正在開發基於 Sherlodoc 的預設用戶端搜尋引擎。
活動
- 在十月份合併了 為
odoc
新增搜尋支援的 PR 之後,我們持續致力於基於 Sherlodoc 構建與odoc
相容的搜尋引擎。這將為每個使用odoc
的套件提供基於類型的搜尋引擎。我們的計畫是讓 Sherlodoc 成為 Dune 文件產生中的搜尋引擎。您可以在 Varray 的文件上試用早期演示版本 -- art-w/sherlodoc#4 - 基於
odoc
對搜尋的支援,我們合併了一個 PR,該 PR 將出現次數資訊新增到搜尋索引中。這將允許odoc
搜尋引擎透過使用出現次數來改善搜尋結果的排序。-- ocaml/odoc#976
odoc
] odoc
中圖片和資產的語法 (W25)
[貢獻者: @panglesd (Tarides)、@jonludlam (Tarides)、@dbuenzli、@gpetiot (Tarides)
原因: 讓套件作者能夠透過直接將多媒體元素整合到 OCaml 套件文件中來建立豐富、引人入勝的文件。
內容: 我們正在引入新的語法和支援,以便在 odoc
環境中嵌入媒體(圖片、音訊、影片)和處理資產。
活動
- 在環境中新增資產,以使其與其他可解析的元素相似地處理。這解決了剩餘的審查回饋意見,如果沒有其他阻礙因素,該 PR 應該可以合併了。-- ocaml/odoc#1002
odoc
] 改善 odoc
的效能 (W25)
[貢獻者: @jonludlam (Tarides)、@julow (Tarides)、@gpetiot (Tarides)
原因: 解決 odoc
中的效能問題,特別是針對大規模文件,以提高效率和使用者體驗,並在大型程式碼庫中解鎖本機文件產生。
內容: 分析 odoc
的效能瓶頸,並根據分析結果優化 odoc
。
活動
- 實驗使用不同的資料結構和演算法,以便更有效率地在大型檔案上產生文件。--ocaml/odoc#1033、ocaml/odoc#1036、ocaml/odoc#1049
- 實作了簽章中的項目查詢改進,以加快處理速度。-- ocaml/odoc#1049
- 開發了針對由
module type of
運算式引起的記憶體問題的修復程式,並在 Jane Street 的測試中取得了令人鼓舞的成果。-- ocaml/odoc#1042
W25)
[Dune] 使用 Dune 產生相依性文件 (貢獻者: @jonludlam (Tarides)
原因: 透過提供直接存取相依性文件的方式,增強本機產生文件的可用性。
內容: 實作新的 Dune 規則給 odoc
,以便為您的 switch 中的所有 opam 套件啟用有效率的文件產生和文件存取。
活動
- 新的 Dune 規則已合併,並可在最新版本的 Dune 3.12.1 中使用。試著執行
dune build @doc-new
以產生您的文件,並告訴我們您的想法!-- ocaml/dune#8803 - 發布後不久,我們注意到相依性處理存在問題。我們正在開發一個修復程式,應該會發布 -- ocaml/dune#9461
W19)
[Merlin] 在 Merlin 中支援專案範圍的參考 (貢獻者: @voodoos (Tarides)、@trefis (Tarides)、@Ekdohibs (OCamlPro)、@gasche (INRIA)
原因: 透過提供專案範圍的參考編輯器功能,增強開發人員的程式碼導覽和重構,使 OCaml 與其他語言中的編輯器體驗保持一致。
內容: 引入 merlin single occurrences
和 LSP textDocument/references
支援,擴展編譯器的 Shapes 以支援全域出現次數,並將這些功能整合到 Dune、Merlin 和 OCaml LSP 中。
活動
- 專案範圍出現次數的第一個迭代正在接近完成,我們建立了一個自訂的
opam-repository
來測試此功能,同時這些變更會進入上游編譯器中。這讓我們有機會在更多真實專案上測試此功能,並且在另一輪錯誤修復和 UI 改善之後,我們將其開放給社群進行更廣泛的測試。 - 為了迎接一月份的更新,編譯器 PR 已合併! :tada: 後續步驟是重新審視其他專案的修補程式,並將 PR 開放到上游。Dune 是下一個排隊的專案。-- ocaml/ocaml#12508
W19)
[Merlin] 改善 Merlin 的效能 (貢獻者: @pitag (Tarides)、@Engil (Tarides)、@3Rafal (Tarides)
原因: 某些 Merlin 查詢在大型程式碼庫中擴展性不佳,導致編輯器體驗不盡理想,且使用者回報他們有時必須等待幾秒鐘才能得到答案。這顯然是一個損害開發人員體驗的主要問題,因此我們正在努力改善 Merlin 在效能不佳時的表現。
內容: 開發基準測試工具,並根據分析基準測試結果所做的效能分析和有針對性的改進,來優化 Merlin 的效能。
活動
- 我們已將檔案快取生命週期設為可配置。變更生命週期將允許實驗 Merlin 的時間/空間權衡。以前,它始終設定為 5 分鐘。-#1698
- 引入了一個設定,讓使用者設定檔案快取的存留時間。如果將其修改為較大的值,則應該可以提高大型儲存庫的效能 -- ocaml/merlin#1698
- 將檔案快取存留時間標誌引入
ocaml-lsp
,因此它可用於所有 LSP 用戶端 -- ocaml/ocaml-lsp#1210
- 我們豐富了嵌入在
ocamlmerlin
回應中的遙測資料 - 我們完成了 Merlin 新的 Fuzzy CI,這是效能工作的副產品。
- 我們已開啟 PR - #1716 (和 #1719)
- 我們編寫了一篇 GitHub wiki 文章,其中包含有關它的高階描述。- Merlin Fuzzy CI