平台電子報:2024 年 1 月

歡迎來到 OCaml 平台電子報第九期!

在本 2024 年 1 月的電子報中,我們很高興為您帶來 OCaml 平台的最新消息,延續我們在先前版本中強調近期發展的傳統。若要了解我們的前進方向,特別是有關開發工作流程和使用者體驗改進的部分,請查看我們的路線圖

重點

  • 期待已久的 Merlin 全專案參考的預覽版本已發布。請閱讀公告了解更多資訊。
  • opam 2.2 的第一個 Beta 版已發布!請試用看看,如果您在 Windows 上使用 opam 時遇到任何問題,請告知 opam 團隊。
  • odoc 團隊開始努力將 OCaml.org 套件文件與 Dune 提供的本機工作流程統一。這非常令人興奮,因為結果應會是大幅改進的 Dune 本機文件,以及 OCaml.org 上更快速的 odoc 功能發布。他們目前處於專案的起步階段,但請密切關注未來幾個月的精彩消息!

發布

[Dune] 探索 Dune 中的套件管理 (W4)

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

原因: 將 OCaml 工具統一在單一命令列下,以用於所有開發工作流程。這解決了社群回報中最主要的痛點之一。

內容: 使用 opam 作為函式庫,在 Dune 中原型化套件管理的整合。我們正在導入 dune pkg lock 命令以產生鎖定檔,並增強 dune build 以處理鎖定檔中的相依性。詳細資訊請參閱 Dune RFC

活動

  • 支援 opam 的 pin-depends 欄位 -- https://github.com/ocaml/dune/pull/9685
  • 為使用 dev 來源的套件正確設定 %{pkg:dev} -- https://github.com/ocaml/dune/pull/9605
  • 移除 Repository_id 重構,現在改為使用 Git URL 來指定修訂版本 -- https://github.com/ocaml/dune/pull/9614
  • 移除 --skip-update 並且在可能時自動推斷離線模式 -- https://github.com/ocaml/dune/pull/9683
  • 支援儲存庫中的子模組 -- https://github.com/ocaml/dune/pull/9798
  • 在建置期間,不要多次下載相同的套件來源封存檔。許多 OCaml 套件都位於 Git 儲存庫(和來源封存檔)中,其中包含其他數個相關的套件,而且專案通常會依賴來自相同儲存庫的多個套件。若沒有此變更,則會針對專案的相依性中出現的每個來自該儲存庫的套件下載一次該儲存庫的來源封存檔 -- https://github.com/ocaml/dune/pull/9771
  • 新增一個 cond 陳述式以選擇 lockdir。這允許根據目前系統的屬性(例如,作業系統、架構)選擇 lockdir,這將簡化具有系統特定相依性的專案的處理。 -- https://github.com/ocaml/dune/pull/9750

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

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

原因: 藉由整合原生 opam 和 opam-repository 支援,增強 OCaml 在 Windows 上的可行性,培養更大的社群以及更多對 Windows 友善的套件。

內容: 發布具有原生 Windows 支援的 opam 2.2,使官方 opam-repository 可在 Windows 平台上使用。

活動

[odoc] 統一 OCaml.org 和本機套件文件 (W25)

貢獻者: @jonludlam (Tarides)、@julow (Tarides)、@panglesd (Tarides)

原因: 改善本機文件產生工作流程將有助於套件作者為其套件撰寫更好的文件,而整合不同的 odoc 文件產生器將有助於讓更多受眾使用 odoc 的持續改進。

內容: 我們將撰寫驅動程式必須遵循的慣例,以確保其輸出將可運作。一旦建立之後,我們將更新 Dune 規則以遵循這些規則、存取新的 odoc 功能(例如,來源轉譯)並提供與 docs.ocaml.org 類似的功能(例如,導覽側邊欄)。這將有效地使 Dune 可用於產生 OCaml.org 套件文件。

活動

  • 我們首先比較各種驅動程式、它們的需求和限制,並詳細說明慣例可能的外觀。我們將在開始實作工作之前發布 RFC,以確保我們確實了解每個人的需求。

[odoc]odoc 新增搜尋功能 (W25)

貢獻者: @panglesd (Tarides)、@EmileTrotignon (Tarides)、@julow (Tarides)、@jonludlam (Tarides)

原因: 藉由提供進階搜尋選項(如以類型為基礎的查詢),改善本機和 OCaml.org 上 OCaml 套件文件的可用性和導覽性。

內容:odoc 中實作搜尋引擎介面,其中包含 UI 和搜尋索引。此外,我們正在開發基於 Sherlodoc 的預設用戶端搜尋引擎。

活動

  • 我們在 1 月份持續研究 Sherlodoc,並且幾週前發布了新版本,現在可以內嵌在 odoc 建置的文件網站上。
  • 我們也完成了更新驅動 odoc 的 Dune 規則,以在本機建置的文件上啟用新的搜尋功能。這些變更已作為 Dune 3.14.0 的一部分發布。-- ocaml/dune#9772

[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

活動

[Merlin] Merlin 中對全專案參考的支援 (W19)

貢獻者: @voodoos (Tarides)、@trefis (Tarides)、@Ekdohibs (OCamlPro)、@gasche (INRIA)、@Octachron (INRIA)

原因: 藉由提供全專案參考編輯器功能,增強開發人員的程式碼導覽和重構,使 OCaml 與其他語言的編輯器體驗保持一致。

內容: 導入 merlin single occurrences 和 LSP textDocument/references 支援,擴展編譯器的 Shapes 以支援全域發生次數,並將這些功能整合到 Dune、Merlin 和 OCaml LSP 中。

活動

[Merlin] 改善 Merlin 的效能 (W19)

貢獻者: @pitag (Tarides)、@Engil (Tarides)

原因: 有些 Merlin 查詢在大型程式碼庫中顯示出較差的擴充性,導致編輯器體驗不佳。使用者回報他們有時必須等待幾秒鐘才能獲得答案。這顯然是一個影響開發人員體驗的主要問題,因此我們正在努力改善 Merlin 在效能不足時的效能。

內容: 開發基準測試工具,並透過根據基準測試結果的分析和設定檔最佳化來改善 Merlin 的效能。

活動

  • 我們合併了模糊測試 CI。提醒您,此 CI 會測試 Merlin PR 的行為是否回歸。這將有助於我們確保不會透過在廣泛的使用案例中測試它們來無意中中斷 Merlin 查詢 - ocaml/merlin#1716
  • merlin-lib 中,我們開始編寫原型,以便與查詢計算平行處理緩衝區。平行處理是指 OCaml 5 平行處理(網域)。