平台新聞稿:2024 年 3 月至 5 月
歡迎來到 OCaml 平台新聞稿第十一期!
在 2024 年 3 月至 5 月的這一期中,我們很高興為您帶來 OCaml 平台的最新消息,延續我們在先前版本中強調近期發展的傳統。若要了解我們的前進方向,特別是關於開發工作流程和使用者體驗的改進,請查看我們的路線圖。
重點
- 關於 Dune 套件管理的探索已達到最小可行產品 (MVP) 階段:一個可以建置像 OCaml.org 和 Bonsai 等非簡單專案的 Dune 版本。有了可用的 MVP,團隊正將重心轉移到將 Dune 套件管理交到社群手中。為此,我們已啟動 Dune 開發者預覽計畫,我們將在此計畫中與使用者一起測試 Dune 套件管理,並在最終發布前完善使用者體驗。
- opam 團隊發布了 opam 2.2 的第二個 beta 版本,並隨之開啟了 最終 PR,將 Windows OCaml 的支援新增至 opam-repository。一旦 PR 合併,opam 2.2 將可在 Windows 上與上游 opam-repository 搭配使用,為即將推出的第三個 beta 版本和後續的候選版本鋪路。
- odoc 團隊已完成 Odoc 3.0 的初始設計,並開啟多個 RFC 以收集社群意見。我們實作了一個新的 Odoc 驅動程式,該驅動程式遵循 Odoc 3.0 的設計,並已開始原型化設計的關鍵部分。
- Merlin 的專案範圍參考查詢即將發布。必要的 編譯器 PR 已合併並包含在 OCaml 5.2 中,而 Dune 規則 PR 已合併並包含在 Dune 3.16 中。接下來的步驟是合併 Merlin 本身中的 PR 和 OCaml LSP 中的小型修補程式。
- 與
ppx_deriving.std
一起提供的標準衍生器組(例如[@@deriving show, make, ord, eq, ...]
)以及ppx_deriving_yojson
現在直接針對 Ppxlib 的 API 撰寫。這會以兩種方式影響開發人員。首先,它可讓您在使用這些衍生器的專案中享受可靠的編輯器功能 (Ppxlib 會保留 Merlin 的位置不變性)。其次,您可以透過使用 Ppxlib 的deriving_inline
功能來避免對這些衍生器的硬性相依性。非常感謝 @sim642 的所有工作和非常好的耐心、@NathanReb 的審閱和發布管理,以及所有其他參與者!
發布版本
- Ppxlib 0.32.1
- Merlin 5.0
- Dune 3.14.2
- Dune 3.15.0
- Dune 3.15.2
- Dune 3.15.3
- Odoc 2.4.2
- opam 2.1.6
- opam 2.2.0~beta2
- ocamlformat 0.26.2
W4)
[Dune] 探索 Dune 中的套件管理 (貢獻者: @rgrinberg (Tarides)、@Leonidas-from-XIV (Tarides)、@gridbugs (Tarides)、@Alizter
原因: 將 OCaml 工具統一在單一命令列下,以用於所有開發工作流程。這解決了社群回報的最重要痛點之一。
內容: 原型化將套件管理整合至 Dune 的工作,使用 opam 作為函式庫。我們將導入 dune pkg lock
命令以產生鎖定檔案,並增強 dune build
以處理鎖定檔案中的相依性。如需更多詳細資訊,請參閱 Dune RFC。
摘要
在過去三個月中,在新增 Dune 對套件管理的支援方面取得了重大進展。我們很高興地報告,我們的原型已達到最小可行產品 (MVP) 階段:一個實驗性的 Dune 套件管理版本,可用於建置非簡單專案,包括 OCaml.org 和 Bonsai,我們正將這些專案用於測試中。
雖然還有很長的路要走,但隨著達到這個里程碑,我們現在正將重心從原型化轉移到將此功能交到社群手中。我們正準備與使用者一起測試新的 Dune 功能,特別是現在我們對技術阻礙及其解決方法有了很好的了解,我們將專注於驗證和完善 Dune 套件管理的開發人員體驗 (DX),以準備首次發布。
為此,Dune 團隊已啟動 Dune 開發者預覽計畫。我們目前正與選定的 beta 測試人員一起測試套件管理的開發者預覽版,一旦解決了最大的問題,我們將向更廣泛的社群開放。
活動
- 持續解決 ocamlfind 和 zarith 的剩餘問題。
- 新增 ocamlfind 和 zarith 問題的重製 PR – ocaml/dune#10233、ocaml/dune#10235。
- 反覆測試可重新配置的 ocamlfind 的解決方案 – ocaml/ocamlfind#72。
- 移除 ocamlfind 中的
.mml
參考 – ocaml/ocamlfind#75。 - 為安裝動作設定 OCAMLFIND_DESTDIR,以修正 ocamlfind 安裝問題 – ocaml/dune#10267。
- 新增一個測試,重製當釘選語句包含工作區外部的相對路徑時鎖定所發生的錯誤 – ocaml/dune#10255。
- 修正不同檔案系統上具有目錄的套件建立問題 – ocaml/dune#10214。
- 開啟 PR 以解決使用者錯誤、改善錯誤訊息,並增強 pkg 規則的環境處理 – ocaml/dune#10385、ocaml/ocamlbuild#327、ocaml/dune#10403、ocaml/dune#10407、ocaml/dune#10455。
- 解決與
withenv
動作、dune pkg lock
以及變數更新的非預期行為相關的幾個問題 – ocaml/dune#10404、ocaml/dune#10408、ocaml/dune#10417、ocaml/dune#10440、ocaml/opam#5925、ocaml/opam#5926。 - 核准 ocamlfind 和 ocamlbuild 的可重新配置發布 – ocaml-dune/opam-overlays#1、ocaml-dune/opam-overlays#2。
- 清理並徵求有關可重新配置 ocamlfind PR 的意見 – ocaml/ocamlfind#72。
- 為了規避編譯器 (目前!) 不可重新配置的事實,我們致力於在 Dune 中新增對管理編譯器和開發人員工具的支援,這項實驗性功能我們稱之為 Dune 工具鏈 – ocaml/dune#10470、ocaml/dune#10474、ocaml/dune#10475、ocaml/dune#10476、ocaml/dune#10477、ocaml/dune#10478。
- 解決與 pkg lock、環境更新和套件管理相關的各種問題 – ocaml/dune#10512、ocaml/dune#10499、ocaml/dune#10498、ocaml/dune#10531、ocaml/dune#10521、ocaml/dune#10539、ocaml/dune#10540、ocaml/dune#10543、ocaml/dune#10544、ocaml/dune#10545、ocaml/dune#10538、ocaml/dune#10542、ocaml/dune#10595、ocaml/dune#10596、ocaml/dune#10592、ocaml/dune#10593。
- 合併 PR 以將解壓縮程式碼用於 rsync URL 並停用 hg/darcs 提取程式碼 – ocaml/dune#10556、ocaml/dune#10561。
W5)
[opam] opam 2.2 中對 Windows 的原生支援 (貢獻者: @rjbou (OCamlPro)、@kit-ty-kate (Ahrefs)、@dra27 (Tarides)、@AltGr (OCamlPro)
原因: 藉由整合原生 opam 和 opam-repository
支援來增強 OCaml 在 Windows 上的可行性,培養更大的社群和更多 Windows 友善的套件。
內容: 發布具有原生 Windows 支援的 opam 2.2,使官方 opam-repository
可在 Windows 平台上使用。
摘要
opam 團隊正接近最終發布支援 Windows 的 opam 2.2。在過去幾個月中,我們發布了 opam 2.2 的第二個 beta 版本,解決了使用者在先前版本中回報的一些問題,包括 Windows 問題。
令人興奮的是,我們也開啟了 最終 PR,將 Windows OCaml 的支援新增至 opam-repository。一旦 PR 合併,opam 團隊預計將能在 6 月轉至候選發布版本。
敬請期待未來數週和數月內更多令人興奮的消息和發布版本!
活動
- 在 opam-repository 中封裝編譯器
- 我們清除了 windows-initial 分支中的 WIP 項目,並為 mingw-w64-shims opam 套件建立 C Stub 程式和產生指令碼所需的 mingw-w64-shims 儲存庫。
- 多項針對 msvs-detect 的修正已向上游推送,且 opam 封裝 PR 已完成 – metastack/msvs-tools#17、metastack/msvs-tools#18。
- 已針對 Visual Studio 設定開啟初始向上游推送 PR – ocaml/opam-repository#25440、conf-zstd 的重新組織 – ocaml/opam-repository#25441 和原生 Windows depexts – ocaml/opam-repository#25442。
- 修正了上游 mccs 套件相依性 – ocaml-opam/ocaml-mccs#52、ocaml/opam-repository#25482。
- 已將 flexdll 的來源封裝支援向上游推送 – ocaml/flexdll#135。
- 針對 OCaml 5.3.0 致力於 winpthreads 的封裝指令碼 – ocaml/winpthreads#1。
- 已針對 mingw-w64-shims 開啟其他向上游推送 PR – ocaml/opam-repository#25454,以及 flexdll 和 winpthreads 來源套件 – ocaml/opam-repository#25512。
- 審閱並測試了與 opam-repository-mingw 的 sunset 分支相關的 4.14.2 版本變更 – ocaml-opam/opam-repository-mingw#20, ocaml-opam/opam-repository-mingw#21。
- 更新了 windows-initial 分支以支援 MSYS2,包括建立 msys2-opam 以補足 mingw-w64-shims。
- 向上游提交了 ocaml-variants.5.1.1+effect-syntax 套件的問題 – ocaml/opam-repository#25645。
- 調查了 BER MetaOCaml,確定 4.14.1+BER 在 Windows 上無法運作,並在 opam-repository 中停用了它 – ocaml/opam-repository#25648。
- 進一步處理了草稿 PR,解決了套件維護者電子郵件地址無效的問題 – ocaml/opam-repository#25826。
- 開啟了 Windows 編譯器支援的主要 PR – ocaml/opam-repository#25861,同時有一個用於更新編譯器 opam 檔案的平行草稿 PR – ocaml/ocaml#13160。
- 將 ocaml/ocaml#13100 回溯移植到 5.1.x ocaml-variants – ocaml/opam-repository#25828,等待 opam 2.2.0~beta3 版本發布。
- 發布 opam 2.2
- 完成了各種修補程式和 PR 的工作,包括修復 Dune 中帶重音符號的字元 – ocaml/opam#5861、 ocaml/opam#5871、janestreet/spawn#58、ocaml/opam#5862。
- 致力於 Windows 的效能改進,包括新增工作狀態以及針對執行緩慢的建置工作之旋轉指示器的概念驗證 – ocaml/opam#5883。
- 完成 opam 2.2.0 beta2 的 Cygwin PATH 處理修復 – ocaml/opam#5832。
- 將內部 cygwin 安裝標記為建議安裝 - ocaml/opam#5903
- 劫持
%{?val_if_true:val_if_false}%
語法以支援擴展名稱中帶有 + 的套件變數 - ocaml/opam#5840 - 修復了下載帶有非有效字元的 URL 以及 opam 內部狀態的問題 – ocaml/opam#5921、 ocaml/opam#5922。
- 組裝了
opam init
的測試工具,並解決了opam lint
警告的問題 – dra27/opam-testing、ocaml/opam#5927、ocaml/opam#5928。 - 修復了環境更新的反轉以及 GitHub Actions 中的小問題 – ocaml/opam#5935、ocaml/opam#5938。
- 發布 opam 2.2~beta2.
- 修復了與環境變數處理相關的問題 – ocaml/opam#5935。
- 完成了 Git for Windows 選單的修復 – ocaml/opam#5963。
- 對
--cygwin-extra-packages
的小修復 – ocaml/opam#5964。 - 重構了
opam init
以獲得更合理的體驗 – ocaml/opam#5963。 - 更新了 lint 警告 41 的 PR – ocaml/opam#5927。
- 回應了 Windows 編譯器套件測試人員發現的問題 – ocaml/flexdll#138、ocaml/flexdll#139。
- 完全重做了
opam init
以偵測 Cygwin 和 MSYS2 安裝。 - 修復了
?
運算子和 MSYS2 原生 curl 實作的問題 – ocaml/opam#5983、ocaml/opam#5984。
odoc
] Odoc 3.0:統一 OCaml.org 和本機套件文件 (W25)
[貢獻者: @jonludlam (Tarides)、@julow (Tarides)、@panglesd (Tarides)、Luke Maurer (Jane Street)
原因:改進本機文件生成工作流程將有助於套件作者為其套件撰寫更好的文件,而整合不同的 odoc
文件產生器將有助於使 odoc
的持續改進適用於更廣泛的受眾。
內容:我們將建立驅動程式必須遵循的慣例,以確保其輸出是可用的。一旦建立,我們將更新 Dune 規則以遵循這些規則,存取新的 odoc
功能(例如,原始碼呈現),並提供與 docs.ocaml.org 類似的功能(例如,導覽側邊欄)。這將有效地使 Dune 可用於產生 OCaml.org 套件文件。
摘要
Odoc 團隊在即將推出的 Odoc 3.0 上取得了重大進展。我們在巴黎舉行了富有成效的親自會議,討論了 CLI、原始碼呈現和參考等關鍵設計方面。這些討論導致了各種設計規格組件的 RFC 發布。
我們還開始實作新的 Odoc 驅動程式,該驅動程式遵循新的設計以進行測試,並開始為一些新功能建立原型。
雖然關於 RFC 和特定功能的討論仍在進行中,但我們很高興能有一套紮實的設計規格供社群審閱,並開始實作新設計的關鍵部分。
活動
- 調查了套件名稱/程式庫名稱不符和模組名稱衝突的問題 – jonludlam/2997e905a468bfa0e625bf98b24868e5、jonludlam/0a5f1391ccbb2d3040318b154da8593a。
- 繼續進行 odoc 3.0 設計的工作,包括會議和討論,最終發布了 RFC – ocaml/odoc/discussions/1097。
- 致力於導覽 PR,新增功能、修復錯誤並完成了重定基底 – ocaml/odoc#1088。
- 在巴黎舉行會議討論 odoc 3.0 設計,涵蓋了 CLI、呈現原始碼和參考等主題。
- 開啟了一個 PR,其中包含對獨立頁面中 markdown 的基本支援 – ocaml/odoc#1110。
- 將目前關於資產的提案作為討論發布 – ocaml/odoc/discussions/1113。
- 繼續討論 Markdown 呈現和資產參考 - ocaml/odoc#1110。
- 實作了一個新的驅動程式,用於測試 odoc 3.0 實作 – ocaml/odoc#1121、ocaml/odoc#1128。
- 致力於實作 Odoc 3.0 規格的 --parent-id 標記部分 – ocaml/odoc#1126。
- 致力於實作
-L
和-P
標記 ocaml/odoc#1132
W19)
[Merlin] Merlin 中對專案範圍參考的支援 (貢獻者: @vds (Tarides)、@Ekdohibs (OCamlPro)、@Octachron (INRIA)、@gasche (INRIA)、@emillon (Tarides)、@rgrinberg (Jane Street)、@Julow (Tarides)
原因:透過提供專案範圍參考編輯器功能來增強開發人員的程式碼導覽和重構,使 OCaml 與其他語言的編輯器體驗保持一致。
內容:導入 ocamlmerlin server occurrences
和 LSP textDocument/references
支援,擴展編譯器的 Shapes 以取得全域出現次數,並將這些功能整合到 Dune、Merlin 和 OCaml LSP 中。
摘要
過去幾個月,在發布 Merlin 的專案範圍參考查詢方面取得了驚人的進展:編譯器 PR 已合併並包含在現在發布的 OCaml 5.2 中;Dune 規則 PR 已合併,並且在索引工具上取得了顯著的效能改進。Merlin 中的最終 PR 已開放並正在審查中。該 PR 以及支援該功能的小型 LSP 修補程式即將合併。
Merlin 上的 PR 還增加了 Emacs 的 Merlin 伺服器外掛程式中對該功能支援。已另外新增了 Vim 的 Merlin 伺服器外掛程式的支援。所有基於 LSP 的編輯器外掛程式都將自動支援此新功能。
活動
- 我們跟進了編譯器 PR 以改善形狀別名弱化簡的效能。它已合併,並進入了 OCaml 5.2.0。– ocaml/ocaml#13001
- 我們改進了驅動索引器的 Dune 規則:簡化了規則、新增了基準測試、討論並改善了效能。該 PR 已合併,並進入了 Dune 3.16。- ocaml/dune#10422
- 我們完善了索引器
ocaml-index
:分析了它並將其速度提高了約 2 倍,並改善了其 CLI。 - 我們將
:MerlinOccurrencesProjectWide
命令新增到基於 Merlin 伺服器的 Vim 外掛程式中 - ocaml/merlin#1767