平台新聞稿:2024 年 2 月
歡迎來到 OCaml 平台新聞稿的第十期!
在 2024 年 2 月的這一期中,我們很高興為您帶來 OCaml 平台的最新資訊,延續我們在先前版本中強調最新發展的傳統。為了瞭解我們的前進方向,特別是在開發流程和使用者體驗改進方面,請查看我們的路線圖。
重點
- OCaml 平台工具已新增對 OCaml 5.2 的支援。它在臨時版本中提供。
Merlin 4.14-502~preview
(@voodoos (Tarides))Ocaml-lsp-server 1.18.0~5.2preview
(@voodoos (Tarides))Ppxlib 0.32.1~5.2preview
(@NathanReb (部分由 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 套件管理在真實專案中可用的主要剩餘障礙之一,是使一些底層相依性(特別是 OCamlFind 和 OCaml 編譯器)可重定位。-- ocaml/ocamlfind#72
- 我們嘗試使用 Coq 平台修補程式使 OCamlFind 可重定位,但由於
ocamlbuild
建置失敗,我們在使用topkg
的套件時遇到了問題。這導致我們在 Dune 中發現了目錄符號連結處理的錯誤 ocaml/dune#9873、ocaml/dune#9937 - 為了追蹤使用 Dune 套件管理建置 opam 套件的能力,我們開發了一個 GitHub 動作,有效地為我們提供了一組精選套件的 opam 套件涵蓋範圍儀表板。此儲存庫位於 gridbugs/dune-pkg-dashboard。
- 根據上述發現,在 Dune 問題追蹤器上開啟了幾個問題。所有已知問題現在都已在 Dune 問題追蹤器的套件管理 MVP 里程碑中追蹤。
- 我們也專注於改進先前實作的功能。值得注意的變更包括新增工作區套件釘選,以及增強套件中正確的路徑處理 -- ocaml/dune#9940
- 工作內容包括更新和重構以改進來源擷取,特別是移除基本的 Git 組態剖析器,改為直接使用
git config
(ocaml/dune#9905),以及增強 Dune 處理 Git 儲存庫的方式,例如透過rev_store
檢查 Git 儲存庫 (ocaml/dune#10060)。 - 貢獻也集中在完善和測試 Dune 的套件處理,包括修復以確保不會使用 opam 的解壓縮程式碼 (ocaml/dune#10085),以及改進 Dune 處理 Git 儲存庫中的遞迴子模組 (ocaml/dune#10130)。
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 平台上使用。
活動
- 解決了 Windows 載入器在找不到 DLL 時會顯示封鎖對話方塊的問題,透過抑制這些對話方塊並改用結束代碼來遵守最佳做法。此增強功能消除了破壞性中斷,確保自動化任務和 CI 環境更順暢地執行。-- #5828
- 修復了當透過 Cygwin 的
/usr/bin/env
叫用 opam 時的 Shell 偵測問題,增強了與使用 Cygwin 以及cmd
或 PowerShell 的使用者的相容性和使用者體驗。-- #5797 - 在 Windows 上建議開發人員模式。為了優化儲存並符合最佳做法,建議使用開發人員模式來啟用符號連結支援。-- #5831
- 解決了與環境變數處理相關的問題,特別是修復了更新或新增環境變數會錯誤地移除或變更它們的錯誤。-- #5837
- 解決了早期載入 git 位置資訊的問題,特別是透過確保正確擷取和應用與 git 相關的組態來嘉惠 Windows 使用者。-- #5842
- 在 Cygwin 中停用 ACL。透過在
/etc/fstab
中為/cygdrive
掛載設定noacl
,此變更可避免權限不符錯誤,提高 Cygwin 使用者的可靠性和可用性。-- #5796 - 引入了在初始化時定義套件管理員路徑的能力,改進了 Windows 使用者的自訂和整合功能。-- #5847
- 將
winsymlinks:native
新增至 Cygwin 環境變數,改善了 Cygwin 生態系統內的相容性。-- #5793 - 修復了與路徑引號相關的指令碼產生問題,確保更順暢的初始化和設定程序,尤其是在 Cygwin 等混合環境情境中。-- #5841
- 更正了初始化期間
git-location
組態的優先順序和處理,簡化了 Git 整合,並提供更清晰的 Git 設定控制。-- #5848 - 擴展了 eval 變數在內部 Cygwin 安裝中的使用,並調整了設定以更好地適應 Windows 特定的需求,增強了彈性和系統編譯器整合。-- #5829
odoc
] 統一 OCaml.org 和本機套件文件 (W25)
[貢獻者: @jonludlam (Tarides)、@julow (Tarides)、@panglesd (Tarides)、Luke Maurer (Jane Street)
原因: 改進本機文件產生流程將幫助套件作者為其套件撰寫更好的文件,而合併不同的 odoc
文件產生器將有助於讓更多受眾可以使用 odoc
的持續改進。
內容: 我們將撰寫驅動程式必須遵循的慣例,以確保其輸出將可正常運作。一旦建立,我們將更新 Dune 規則以遵循這些規則,存取新的 odoc
功能 (例如,來源轉譯),並提供類似於 docs.ocaml.org 的功能 (例如,導覽側邊欄)。這將有效地使 Dune 可用於產生 OCaml.org 套件文件。
活動
- 繼續設計 Dune 和 OCaml.org 共用的新
odoc
驅動程式慣例,我們計劃在 3 月發布 RFC。 - 我們也開始比較和原型設計各種方法,以將側邊欄支援新增至
odoc
。已開發並與團隊討論了數個原型,一旦採用驅動程式慣例,我們將恢復側邊欄實作的工作。
odoc
] 將搜尋功能新增至 odoc
(W25)
[貢獻者: @panglesd (Tarides)、@EmileTrotignon (Tarides)、@julow (Tarides)、@jonludlam (Tarides)
原因: 透過提供進階搜尋選項 (例如基於類型的查詢),改進 OCaml 套件文件 (無論是在本機還是 OCaml.org 上) 的可用性和導覽性。
內容: 在 odoc
中實作搜尋引擎介面,包含 UI 和搜尋索引。此外,我們正在開發基於 Sherlodoc 的預設用戶端搜尋引擎。
活動
- 我們的主要重點是實作和完善 sherlodoc 與 odoc 的整合,這包括讓 sherlodoc 在不同的架構上通過 opam CI,並調整 dune 規則以提高可用性 -- ocaml/dune#9956
- 在合併大型 sherlodoc PR 並於上個月發布 sherlodoc 之後,我們繼續努力完善 sherlodoc 的 dune 規則,並根據與團隊的討論調整搜尋列的範圍。
- 我們在搜尋列中實作了鍵盤導覽,以提高其可用性 -- ocaml/odoc#1088
odoc
] 改進 odoc
效能 (W25)
[貢獻者: @jonludlam (Tarides)、@julow (Tarides)、@gpetiot (Tarides)
原因: 解決 odoc
中的效能問題,特別是針對大規模文件,以提高效率和使用者體驗,並在大型程式碼庫中解鎖本機文件產生。
內容: 分析 odoc
以找出主要的效能瓶頸,並根據分析結果優化 odoc
。
活動
- 透過解決不存在識別符號的來源位置查找問題,大幅改善了大型程式碼庫的連結時間,從而實現了效能提升。
- 開啟了多個來自模組類型 (module-type-of) 相關工作的 PR,包括旨在增強
odoc
對於傳遞相依性函式庫、形狀查找和模組類型展開處理的修復和測試 -- ocaml/odoc#1078、ocaml/odoc#1081 - 提高了在可存取路徑中尋找
odoc
檔案的效率,在我們的一些測試中,將產生文件時間縮短了一半 -- ocaml/odoc#1075
W19)
[Merlin] Merlin 中對專案範圍參考的支援 (貢獻者: @voodoos (Tarides)
原因: 透過提供專案範圍的參考編輯器功能,增強開發人員的程式碼導航和重構,使 OCaml 與其他語言的編輯器體驗保持一致。
內容: 引入 ocamlmerlin server occurrences
和 LSP textDocument/references
支援,擴展編譯器的 Shapes 以用於全域出現,並將這些功能整合到 Dune、Merlin 和 OCaml LSP 中。
活動
- 持續調查和改進 Dune 規則,以解決組態問題
- 在
merlin-lib
中新增對 OCaml 5.2 的支援後,我們已將專案範圍的出現工作重新建立於其之上。 - 我們也開始與 Jane Street 團隊合作,在其單一程式碼庫中大規模測試專案範圍的參考。在我們的初始整合之後,我們專注於改進 Merlin 的索引和出現查詢功能,包括解決形狀縮減中的瓶頸和退化問題 -- ocaml/ocaml#13001
W19)
[Merlin] 改善 Merlin 的效能 (貢獻者: @pitag (Tarides)、@Engil (Tarides)
原因: 已顯示某些 Merlin 查詢在大型程式碼庫中擴展性不佳,導致編輯器體驗不佳。使用者回報有時必須等待幾秒才能獲得答案。這顯然是一個損害開發人員體驗的重大問題,因此我們正努力改善 Merlin 在效能不足時的表現。
內容: 開發基準測試工具,並透過基於基準測試結果的分析和針對性改進,優化 Merlin 的效能。
活動
- 在
merlin-lib
中,我們繼續開發一個原型,以便與查詢計算並行處理緩衝區。並行性指的是 OCaml 5 的並行性(域)。