平台新聞稿:2023 年 9 月

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

深入了解 9 月的最新更新,並探索 OCaml 平台的發展。如同先前的新聞稿,本期重點介紹了 OCaml 開發工作流程的最新發展和增強功能。

除了以下強調的平台團隊進展更新之外,請隨時在即將推出的平台路線圖上分享您的意見回饋。我們已根據最新的意見回饋更新了路線圖,目標是在未來幾週內採用,除非社群提出新的疑慮。

祝您閱讀愉快!

版本發佈

以下是本月發佈的所有平台工具新版本

如需詳細的版本資訊和公告,請瀏覽OCaml 變更日誌

建置套件

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

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

9 月最大的亮點是,現在已經完成了將 Dune 安裝的套件中的編譯器和函式庫公開給專案其餘部分的工作!這表示現在有一個 Dune 套件管理的原型,可以用於建置依賴於(簡單)opam 套件的專案!這仍然是一個早期的原型,尚未準備好在核心團隊之外進行測試,但仍然是一個重要的里程碑::tada:!

此外,9 月的工作重點在三個方面

  • 增加 opam 功能的覆蓋範圍,以支援來自 opam-repository 的更多 opam 套件。本月,Dune 團隊新增了對新欄位的支援,包括 build-envsetenvsubst,他們也新增了對修補的支援。
  • 設計和實作一個用於 Dune 設定的字串操作 DSL。這將允許使用者在 Dune 套件鎖定檔案中表達與 opam 篩選器中相同的動態性,這對於將 opam buildinstall 命令轉換為 Dune 表達式是必要的。
  • 透過在 dune-workspace 中設定 opam-repository,開始支援自訂 opam 儲存庫。下一步是實驗如何儲存和存取 opam 儲存庫。其中一個想法是,所有 opam 儲存庫都將儲存在一個修訂儲存空間中,該儲存空間將提供所有資料。這樣做的優點是增量更新很小,就像透過 Git 拉取一樣。儲存庫不需要解壓縮,因此使用的儲存空間和 inode 更少。

活動

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

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

為了準備即將推出的 opam 2.2~alpha3 版本,工作重點是更好地處理 setenvbuild-env opam 欄位的路徑重寫。

提出的變更將允許使用者在 opam 檔案中為 setenv/build-env 中的每個環境變數指定他們想要的路徑分隔符和格式。這可確保環境變數在 Windows 上正確設定和可用。

PR 正在審查中,尚未完全準備好合併,但這是 opam 2.2~alpha3 的最後一個範圍問題。

活動

[Dune] Dune 終端使用者介面

貢獻者:@Alizter、@rgrinberg (Tarides)

繼 8 月將 Dune TUI 移植到 Nottui 的 PR 合併,並新增了一些功能後,@Alizter 繼續使用兩個 pull request 建置 Dune 的完整終端使用者介面,即新增tui 模式中的 Jobs 標籤,以及支援多行狀態列

活動

[Dune] 對利基平台的支持

貢獻者:@Alizter

Dune 現在可以在 Haiku 和 Android (使用 Termux) 上建置!這表示現在可以在這些平台上建置和安裝 OCaml 和 Dune,這應該為更多原生的 OCaml 開發鋪路。

作為參考,以下是 Dune 平台支援的表格 (? 表示需要進一步測試)

| 平台 | 支援 | 監看 | TUI | 快取 | 沙箱 | |------------------|---------|-------|-----|-------|------------| | Linux | 完整 | 是 | 是 | 是 | 是 | | MacOS | 完整 | 是 | 是 | 是 | 是 | | Windows (DkML) | 完整 | 是 | 否* | 是 | 僅複製 | | Windows (MinGW) | 有限 | 是 | 是 | 是 | 是 | | Windows (Cygwin) | 有限 | 是 | 是 | 是 | 是 | | Linux (Android) | 有限 | 是 | 是 | ? | ? | | FreeBSD | 有限 | 是 | 是 | ? | ? | | NetBSD | 有限 | 是 | 是 | ? | ? | | OpenBSD | 有限 | ? | ? | ? | ? | | Haiku | 有限 | 是 | 是 | ? | ? |

如果您正在這些平台上工作,如果遇到任何問題,請隨時在 Dune 的錯誤追蹤器上開啟問題!

活動

產生文件

[odoc]odoc 添加搜尋功能

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

為了改善文件瀏覽體驗,我們持續為 odoc 添加搜尋功能。

9 月,odoc 團隊繼續審查 8 月開始的不同 pull request。同儕審查建議對 CLI 和函式庫 API 進行多項改進。

他們還透過僅在使用者點擊搜尋欄時才載入搜尋腳本,來改進用戶端的效能,並且在整體 UI 上取得了很大的進展。

活動

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

貢獻者:@panglesd (Tarides)

odoc 添加圖片和資源支援,並將圖片帶到 OCaml.org 套件文件的努力仍在繼續!

本月,@panglesd 開啟了一個 PR,其中包含資源參考的實作

媒體的確切語法經歷了多種設計,特別是媒體是區塊、可巢狀區塊還是內嵌元素。在本月底,@panglesd 建立了一個 PR,它建立在資源參考 PR 的基礎上,以便新增對媒體的支援。

一段時間以來,對於如何建置 opam 安裝套件的文件,一直沒有官方慣例。在新增資源的複雜性之後,現在是解決這個問題的好時機。開啟了一個文件 PR。非常感謝 @dbuenzli 的徹底審查和參與建立這些慣例!

活動

[Dune] 使用 Dune 產生相依性文件

貢獻者:@jonludlam (Tarides)

目前,Dune 只知道如何為您的 Dune 工作區中的套件建立文件,這表示您只能從 OCaml.org 套件網站讀取相依性的文件。其他 odoc 驅動程式,例如 odig,會為您切換中的所有套件建立文件,並且一直是偏好在本機讀取相依性文件的使用者的建議解決方案。

為了改善使用 Dune 產生文件的體驗,@jonludlam 開發了新版本的 Dune 規則來產生文件。透過這些規則,Dune 將獲得額外的能力來建構兩者的組合:一套涵蓋已安裝在切換中的函式庫和本機函式庫的連貫文件。

PR 正在審查中,並將在未來幾週內合併。

新規則的未來計畫包括與平台其他部分的更好整合,改進功能以涵蓋 dune build @doc 所涵蓋的使用案例、整合原始碼渲染以及整合搜尋(一旦它在 odoc 中實現!)。

活動

編輯和重構程式碼

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

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

八月,Merlin 團隊開啟了編譯器上的 PR,該 PR 在 Shapes 中加入了必要的資訊,以實作專案範圍的參照。

PR 已收到審查,因此團隊在考慮回饋意見的同時,也持續處理堆疊的其他部分(建置系統規則、索引器和新的 locate,以及 Merlin 的出現次數後端)。

他們還整合了發布計畫和時間表。計畫是先發布一個以 4.14 為基礎的編譯器實驗性版本,以便在年底前收集有關此備受期待的功能的回饋。目前目標是在 OCaml 5.2 中提供官方的專案範圍出現次數支援。

活動

[Merlin] 改善 Merlin 的效能

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

Merlin 團隊持續致力於改善 Merlin 的效能。

在深入研究具體的效能最佳化之前,他們開發了一個基準 CI 來捕捉效能回歸並測量改進。在開發的同時,他們還開發了一個模糊測試 CI 來捕捉行為回歸。

九月,繼模糊測試 CI 的概念驗證 (PoC)(來自七月份的工作)之後,團隊繼續努力解決目前 CI 實作中的限制,這些限制會阻止它合併到 Merlin 中。具體來說,他們專注於尋找一種方法來儲存模糊測試結果,而不會使 Merlin 儲存庫膨脹。目前的方法是將資料儲存在單獨的 Git 儲存庫中,並在執行模糊測試 CI 時提取它。他們建立了一個實作此行為的 GitHub 動作工作流程。

接下來,計畫是在逐步將焦點轉向效能最佳化之前,完成 Merlin CI 的工作。

活動