平台新聞稿:2023 年 10 月
歡迎來到 OCaml 平台新聞稿第七版!
在 10 月的這一期中,我們為您帶來 OCaml 平台的最新消息,延續我們在先前版本中強調近期發展的傳統。若要了解我們的前進方向,特別是關於開發工作流程和使用者體驗改進的部分,請查看我們的路線圖。
重點
- OCaml 平台三年路線圖已正式採納!我們很高興擁有社群驅動的路線圖,來改善 OCaml 開發人員的體驗,並且非常感謝社群提供的所有優良回饋。請查看公告。
- 在提供社群回饋和異議的空間之後,我們已棄用 ocaml-migrate-parsetree (又稱 OMP)。它將由 Ppxlib 取代。
- 我們正在為新聞稿引入新的格式。請告訴我們您的想法,以及我們如何讓它對您來說變得更好!
發行版本
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 以取得更多詳細資訊。
活動
- 我們重新設計了 opam 儲存庫的儲存空間。我們現在支援多個儲存庫,我們以有效率的方式儲存和更新這些儲存庫。-- ocaml/dune#8950
- 我們引入了
$ dune pkg outdated
命令來檢視鎖定目錄中所有過期的套件。-- ocaml/dune#8773 - 我們引入了
$ dune describe pkg lock
來列印鎖定目錄。這讓使用者可以清楚瞭解鎖定目錄的建置計畫中有哪些可用項目。-- ocaml/dune#8841 - 我們在
lockdir
中新增了對求解器變數的支援,以確保 opam 變數在建置和安裝時也可用 -- ocaml/dune#8973 - 我們成功地在 Windows 上為
cmdliner
產生鎖定檔!:windows: 接下來,我們將努力讓建置在 Windows 上也能運作。-- ocaml/dune#9048 - 與往常一樣,我們修正了許多會阻止您的常規套件建置的錯誤
- 需要複製建置規則的沙箱 -- ocaml/dune#8923
- 尊重 opam 套件中的 [flags] 欄位 -- ocaml/dune#9047
- 改善無效替代錯誤 -- ocaml/dune#8922
- 正確驗證 tarball 檢查碼 -- ocaml/dune#8876
- 改善轉換錯誤的位置 -- ocaml/dune#8828
- 移除 post deps -- ocaml/dune#8834
- 將求解器環境列印移至自己的命令 -- ocaml/dune#8819
- 在
dune-package
中記錄已安裝的目錄 -- ocaml/dune#8953
W5)
[opam] opam 2.2 中對 Windows 的原生支援 (貢獻者: @rjbou (OCamlPro)、@kit-ty-kate (Tarides)、@dra27 (Tarides)、@AltGr (OCamlPro)
原因: Opam 和 opam-repository
目前不原生支援 Windows。這實際上使 OCaml 在 Windows 上成為非常小眾的候選者,因為使用者必須 (1) 不使用套件管理員或 (2) 使用 opam 的分支和 opam-repository
。使 opam 和 opam-repository
與 Windows 相容,將使 OCaml 成為 Windows 使用者的更好選擇,並有助於我們擴大社群。更多 Windows 使用者能夠使用 opam 將會帶來更多貢獻者、更多測試、更多 Windows 友善的套件,以及最終的更多套件。
內容: 發行 opam 2.2,其中包含對 Windows 的原生支援,並使官方 opam-repository
可在 Windows 上使用。
活動
- 主要集中在 Windows 上的
setenv
&build-env
環境變數更新處理 - ocaml/opam#5636
odoc
] 將搜尋功能新增至 odoc
(W25)
[貢獻者: @panglesd (Tarides)、@EmileTrotignon (Tarides)、@julow (Tarides)、@jonludlam (Tarides)
原因: OCaml.org 中央套件文件中新增的套件內搜尋,受到社群的廣泛好評,並改善了使用者瀏覽和探索 OCaml 文件的方式。我們正在將其上游到 odoc
,以將其也帶入本機文件中,並提供更多進階功能,例如依類型搜尋。
內容: 我們正在 odoc
中新增外掛搜尋引擎的支援! odoc
提供使用者介面 (搜尋列),並將產生搜尋索引 (也可以用於整合到其他搜尋引擎,例如 Elasticsearch)。我們也正在建置基於 Sherlodoc 的預設用戶端搜尋引擎。
活動
- 我們已合併新增新搜尋功能的 PR! :tada: 這將在即將推出的
odoc
2.4.0 版本中推出。 - 我們目前正在嘗試基於 Sherlodoc 建置
odoc
搜尋引擎 -- art-w/sherlodoc#4。
odoc
] odoc
中影像和資產的語法 (W25)
[貢獻者: @panglesd (Tarides)、@jonludlam (Tarides)、@dbuenzli、@gpetiot (Tarides)
原因: 允許套件作者撰寫豐富的文件,使其更有用,並透過為 OCaml 套件提供高品質的文件生態系統來改善 OCaml 開發人員的體驗。
內容: 我們正在新增對資產和新語法的支援,以嵌入媒體 (影像、音訊和影片)。
活動
- 我們已決定稍微修改資產支援設計,使其更符合其他元素的處理方式,例如模組、類型和值。其目的是確保程式碼在長期維護時能簡單明瞭。-- ocaml/odoc#1002
- 我們繼續審查 PR,新增媒體的語法支援。有一些關於遺失資產的良好討論,一旦資產 PR 合併後,就可以開始運作。-- ocaml/odoc#1005
W25)
[Dune] 使用 Dune 產生相依性文件 (貢獻者: @jonludlam (Tarides)
原因: 允許使用者從其套件文件瀏覽到其相依性的文件,使本機產生文件更有用。目前使用者可以使用 odig
,它提供類似的工作流程。我們正在直接在 Dune 中新增此功能支援。
內容: 我們正在為 odoc
撰寫新的 Dune 規則,這些規則 (1) 使用新的 odoc
CLI 來啟用效能改進和快取機會,以及 (2) 產生您交換器中每個 opam 套件的文件,允許使用者從其本機文件瀏覽到其相依性的文件。
活動
- 在收到 @alizter 和 @rgrinberg 的回饋後,新的 Dune 規則已稍微修改,改善了以下方面:更好地支援多個
findlib
目錄;更好地支援系統交換器;以及一種更穩健的方法,用於將findlib
路徑轉換為本機路徑。-- ocaml/dune#8803
W19)
[Merlin] 在 Merlin 中支援專案範圍的參考 (貢獻者: @voodoos (Tarides)、@trefis (Tarides)、@Ekdohibs (OCamlPro)、@gasche (INRIA)
原因: 作為編輯器功能的專案範圍參考,是開發人員瀏覽其程式碼庫並更好地了解它的好方法。這也是使用者期望從其他生態系統獲得的功能,因此在 Merlin 和 OCaml LSP 中支援它,既可以改善 OCaml 編輯器體驗,又可以使其與其他語言媲美。
內容: 我們正在新增新的 merlin single occurrences
命令,並支援 LSP textDocument/references
請求。為此,我們正在擴展編譯器的 Shapes 以支援全域事件,建置一個工具來產生程式碼庫中識別碼的索引,並在 Dune、Merlin 和 OCaml LSP 中新增對它的支援。
活動
- 我們繼續致力於專案範圍事件的編譯器 PR,特別是新增對內嵌記錄標籤的支援。PR 現在已準備好進行下一輪審查。-- ocaml/ocaml#12508
- 同時,我們繼續致力於提供事件所涉及的工具。我們仍然按計劃發行以實驗性 4.14 為基礎的編譯器變體,以便在年底前收集有關該功能的回饋。我們目前的目標是在 OCaml 5.2 中提供官方專案範圍的事件支援。-- voodoos/merlin#8、voodoos/ocaml-lsp#2、voodoos/dune#2、ocaml-index#5
W19)
[Merlin] 改善 Merlin 的效能 (貢獻者: @pitag (Tarides)、@Engil (Tarides)、@3Rafal (Tarides)
原因: 已顯示某些 Merlin 查詢在大型程式碼庫中擴展性不佳,使得編輯器體驗不佳,使用者回報說他們有時必須等待幾秒鐘才能獲得 Merlin 的答案。這顯然是一個損害開發人員體驗的主要問題,因此我們正在努力改善 Merlin 效能不足的地方。
內容: 我們正在建構效能基準測試和模糊測試 CI,以持續基準測試和測試 Merlin。我們正致力於解決從分析 Merlin 的效能並分析基準測試結果中發現的效能瓶頸。
活動
- 我們持續進行 Merlin 的模糊測試 CI 開發工作。我們最初的做法是將測試資料與 Merlin 的提交歷史同步保存。然而,當比較 PR 與其基礎分支之間的資料、產生和保存新資料以及核准變更時,這意味著要處理各種資料競爭的問題。為了避免這種情況,我們在 10 月份嘗試了一種更簡單的方法,在每次 CI 執行時重新產生資料,同時不影響 CI 的執行時間。新方法看來很有希望。
- 我們也回頭著手改善 Merlin 的效能。我們計劃透過實驗(以選擇加入的方式)使用不同的
cmi-cache
和cmt-cache
的生命週期來最佳化 Merlin 的空間時間權衡。為此,我們正在將有關 Merlin 記憶體使用情況的資訊加入到其遙測數據中。此外,我們也研究了如何改進類型檢查器快取的粒度,並分析了其挑戰。