平台新聞信:2024 年 6 月至 8 月
歡迎來到 OCaml 平台新聞信的第十二期!
在 2024 年 6 月至 8 月的這一期中,我們很高興為您帶來 OCaml 平台的最新資訊,延續我們在先前版本中強調近期發展的傳統。為了了解我們的發展方向,特別是關於開發工作流程和使用者體驗的改進,請查看我們的路線圖。
重點
- Dune 套件管理即將推出公開測試版:開發者預覽計畫擴展,已有 60 多個訪談註冊(目前已進行 16 個),淨推薦值 (NPS) 從 +9 飆升至 +28!公開測試版即將推出,包含自動依賴鎖定和開發工具管理等令人興奮的功能。觀看實際操作!
- Opam 2.2 已發布:原生 Windows 支援來了!使用
opam init
進行無縫設定,opam-repository
與 Windows 相容。OCaml 在 Windows 上現在成為現實。 - Odoc 3.0 即將發布: 全域側邊欄和媒體支援等新功能已在 odoc 中準備就緒。正在進行與 Dune 和 OCaml.org 管道的整合 - 準備好測試新的文件體驗!查看 RFC。
- 專案範圍參考已上線:Merlin 5.1 和 OCaml LSP 1.18.0 為您的編輯器帶來強大的程式碼導覽功能。它建立在多年的編譯器工作基礎上,對於大型程式碼庫來說是一大變革。
- 開始縮小 Merlin 和 OCaml LSP 之間的差距: 針對類型封閉、文件等的新 LSP 查詢。我們正努力在由 OCaml LSP 驅動的所有編輯器中實現一致且功能豐富的體驗。
版本
- opam 2.2.0~beta3
- opam 2.2.0~rc1
- opam 2.2.0
- opam 2.2.1
- Dune 3.16.0
- opam-publish 2.3.1
- Merlin 5.1
- Merlin 4.16
- Merlin 4.15
- OCaml LSP 1.19.0
- OCaml LSP 1.18.0
- Ppxlib 0.33.0
W4)
Dune 套件管理(貢獻者:@rgrinberg (Jane Street)、@Leonidas (Tarides)、@gridbugs (Tarides)、@maiste (Tarides)、@ElectreAAS (Tarides)、@moyodiallo (Tarides)、@Alizter
概要: 將套件管理整合到 Dune 中,使其成為 OCaml 開發所需的唯一工具。這種統一消除了安裝時間(只需下載 Dune 的預先建置二進位檔),自動化外部工具管理(例如,用於 dune fmt
或 dune ocamllsp
),並透過快取顯著縮短建置時間(套件和編譯器在專案中只建置一次)。
摘要
繼我們在上一期新聞信中宣布 Dune 套件管理達到最低可行產品 (MVP) 階段後,我們在既定目標上取得了實質性進展。正如承諾的那樣,我們已將重點從原型設計轉移到使用者測試和完善開發人員體驗 (DX)。
開發人員預覽計畫(請參閱最新更新)已從早期階段大幅擴展。在 60 個註冊中,我們進行了約 16 個開發人員訪談,代表了 OCaml 社群中不同的橫截面。受訪者包括新手和經驗豐富的 OCaml 使用者。值得注意的是,約 40% 的參與者擁有超過 3 年的 OCaml 經驗,而 35% 是經驗不足 1 年的相對新手。大多數人來自 Linux 和 macOS 環境,參與者代表各種部門,包括科技公司、研究機構和獨立開發人員。
這些會議提供了重要的回饋意見並推動了改進。這項廣泛的使用者測試已見成效,淨推薦值從 +9 跳升至估計的 +28,這清楚地表明社群對我們所做的改進感到興奮。
自上次更新以來的重點發展包括
- 啟用套件管理的 Dune 夜間二進位發行版,將在未來幾週內公開提供。
- 我們開始研究自動處理開發人員工具 (ocamlformat、ocamllsp、odoc) – 使用者將能夠執行
dune fmt
或dune ocamllsp
,如果它們不可用,Dune 將自動負責安裝 OCamlFormat 和 OCaml LSP。 - 實作專案依賴項變更時的自動依賴項鎖定 – 您現在可以在監看模式下執行 Dune,並讓它在更新您的 dune-project 後安裝您的依賴項,無需任何干預
- 我們已預設啟用 Dune 快取,它適用於您的套件依賴項。有了這個變更,在建置新專案(包括編譯器)時,Dune 不會多次重新編譯依賴項!
團隊不僅僅使用 OCaml.org 和 Bonsai 進行測試,現在還在整個 opam 儲存庫中進行更廣泛的相容性測試。初步結果顯示,大約 50% 的套件可以使用具有套件管理的 Dune 來撰寫,並且正在努力提高覆蓋率(我們預計解決少數幾個基礎套件上的問題將顯著提高此百分比)。
為了履行準備首次發佈的承諾,該團隊計劃在未來幾週內推出公開測試版。這標誌著從我們目前與選定的測試人員進行的私人開發人員預覽測試,到更廣泛的社群發佈的重要一步。
請繼續關注即將發佈的公告,同時,請查看演示和來自測試人員的一些熱情訊息
- Mastodon 上的演示:Mastodon 或 X
- 「剛做了 dune 套件管理預覽,看起來非常棒」-- https://x.com/ckarmstrong/status/1830937156434747566
- 「真的很期待這個!不再有切換、不再有 opam,只有 dune 的行為像現代套件管理器。玩了一下,感覺真是太棒了。對 DX 的關注真的讓我對 OCaml 的未來充滿希望。」-- https://x.com/synecdokey/status/1825533523283079474
活動
- 實作了避免不穩定編譯器的變通方法 -- ocaml/dune#10668
- 新增了對多個檢查碼的支援(ocaml/dune#10624、ocaml/dune#10791)
- 開始向上游推送 Dune 工具鏈功能 (ocaml/dune#10639、ocaml/dune#10719)
- 當依賴項變更時新增了隱式重新鎖定 -- ocaml/dune#10641
- 改進了依賴項解析和限制處理 (ocaml/dune#10726)
- 新增了開發人員預覽功能和配置選項 (ocaml/dune#10627)
- 實作了套件建置和鎖定檔產生的進度指示器(ocaml/dune#10802、ocaml/dune#10803)
- 改進了錯誤訊息和記錄 (ocaml/dune#10662)
- 為新的套件管理功能建立了廣泛的測試套件 (ocaml/dune#10798)
- 解決了建置特定套件(例如,seq、lwt)的問題(ocaml/dune#10788、ocaml/dune#10839)
- 在提取操作上啟用快取以加快建置速度 (ocaml/dune#10850)
- 改進了 ocamlformat 等開發工具的處理 (ocaml/dune#10647)
- 開發了用於測試 opam-repository 上套件相容性覆蓋率的工具
W5)
opam 2.2 中對 Windows 的原生支援(貢獻者:@rjbou (OCamlPro)、@kit-ty-kate (Ahrefs)、@dra27 (Tarides)、@AltGr (OCamlPro)
概要: 發布具有原生 Windows 支援的 opam 2.2,以增強 OCaml 在 Windows 上的可行性,使官方的 opam-repository
可在 Windows 上使用,並鼓勵更多 Windows 友好的套件。
摘要
在 7 月初在 Discuss 上宣布的 opam 2.2.0 發布,標誌著 OCaml 生態系統的一個重要里程碑。此版本在 Windows 上為 opam-repository
中的 opam 用戶端和編譯器套件帶來了原生支援,為此平台上的 OCaml 開發開闢了新的可能性。
opam 2.2.0 正式支援 Cygwin,並與 MSYS2 相容。Windows 使用者現在可以在他們喜歡的控制台中執行 opam init
以進行引導式設定,從而獲得功能齊全的 OCaml 環境。此版本代表了社群廣泛貢獻的多年努力的結晶。
OCaml 生態系統已經在適應這種新功能。一個針對 Windows 編譯的 CI 檢查已新增至 opam-repository,並且GitHub Action ocaml/setup-ocaml 現在使用 opam 2.2.0,方便在 GitHub 專案中進行 Windows 上的 OCaml 開發。
社群成員正積極努力改進整個生態系統的 Windows 相容性。值得注意的努力包括 Hugo Heuzard 的關於 OCamlBuild 和其他幾個與 Windows 相關的 PR 的工作。
我們鼓勵套件作者為其專案設定 Windows CI 並解決與 Windows 相關的問題。這種集體努力對於擴大 OCaml 在 Windows 平台上的覆蓋範圍和可用性至關重要。
活動
- Opam 二進位檔
- 修正了 Windows 上
opam init
的問題 -- ocaml/opam#5991, ocaml/opam#5992, ocaml/opam#5993, ocaml/opam#5994, ocaml/opam#5995, ocaml/opam#5996, ocaml/opam#5997, ocaml/opam#5998, ocaml/opam#6000 - 改進了 Windows 上緩慢操作期間的狀態顯示 -- ocaml/opam#5977
- 使 opam 能夠在 Windows 上使用包含空格的使用者名稱 -- ocaml/opam#5457
- 修正了
opam init -yn
在發佈候選版中處理選單的問題 -- ocaml/opam#6033 - 更新了從 GitHub 版本安裝 opam 的 PowerShell 腳本:ocaml/opam#5906
- 修正了
setup-ocaml
和 depexts 的掛起問題 -- ocaml/opam#6046
- 修正了 Windows 上
- 更新 opam-repository 以與 Windows 相容
- 更新了
opam-repository
Windows CI -- ocaml/opam-repository#26081, ocaml/opam-repository#26073, ocaml/opam-repository#26080 - 在 OCaml-variants.5.2.0+msvc 中加入了 MSVC 的向後移植 -- ocaml/opam-repository#26082
- 更新了原生 Cygwin depexts -- ocaml/opam-repository#26130
- 使用 Windows 特定的套件資訊更新了 opam-repository
- 新增了 Windows 編譯器套件 (ocaml/opam-repository#25861)
- 修正了 Windows 上 OCaml 變體的問題 (ocaml/opam-repository#26033)
- 更新並發佈了 mingw-w64-shims.0.2.0,以修正 setup-ocaml 的問題 (ocaml/opam-repository#26123)
- 更新了
- 發佈了具有完整 Windows 支援的 opam 2.2.0 穩定版本 🎉 (公告)
W25)
使用 Odoc 3.0 升級 OCaml 套件文件 (貢獻者: @jonludlam (Tarides), @julow (Tarides), @panglesd (Tarides), @EmileTrotignon (Tarides), Luke Maurer (Jane Street)
概要:使用 odoc 3 升級 OCaml 套件文件體驗,具有改進的導航、跨套件參照、媒體支援等功能。此升級旨在改進本地和 OCaml.org 上的文件體驗,鼓勵更高品質的套件文件。
摘要
在完成 odoc 3.0 的 RFC 並經過社群審查後,我們在新設計和功能實施方面取得了重大進展。在過去的幾個月裡,我們的進展使我們接近 odoc 3.0 功能集的完整實施。隨著我們完成開發並接近首次發佈,我們的重點正在轉向與生態系統的其他部分整合。
過去幾個月的主要進展包括
- 為
odoc
CLI 新增選項以開始實施odoc
3 CLI - 實施了新的語法,例如路徑參照
- 開發了具有獨立頁面和套件模組層次的 TOC 的全域側邊欄
隨著我們接近核心 odoc 3.0 功能集的完成,我們的重點正在轉向完成與 Dune 和 OCaml.org 文件管道的整合。我們很高興能將所有這些改進交付給您,並獲得您對新文件體驗的回饋。請繼續關注有關測試機會和即將發佈的 odoc 3.0 的公告!
活動
- 新增了
path-references
查找功能 -- ocaml/odoc#1150 - 新增了
--current-package
選項 -- ocaml/odoc#1151 - 修正了階層式頁面被給予錯誤的父 ID 的問題 -- ocaml/odoc#1148
- 剖析頁面和模組的
path-references
(ocaml/odoc#1142) - 支援文件中的資產和媒體 (ocaml/odoc#1184)
- 實施了「全域」側邊欄功能 (ocaml/odoc#1145)
- 新增了對外部頁面和非套件文件的支援 (ocaml/odoc#1183)
- 改進了 CSS 以獲得更好的視覺呈現效果 (ocaml/odoc#1159)
- 新增了用於索引生成的序列化輸出 (ocaml/odoc#1084)
- 實施了 Voodoo/Dune 驅動程式以改進整合 (ocaml/odoc#1168)
- 新增了對 mld 頁面的 frontmatter 支援 (ocaml/odoc#1187)
- 改進了麵包屑導覽以顯示套件和程式庫 (ocaml/odoc#1190)
W19)
OCaml 編輯器中的專案範圍參照 (貢獻者: @vds (Tarides)
概要:在 Merlin 和 OCaml LSP 中引入專案範圍參照功能,以增強程式碼導航和重構功能,使 OCaml 的編輯器體驗與其他現代程式設計語言保持一致。
摘要
如六月宣布的那樣,Merlin 專案範圍參照現在已在 Merlin 5.1 和 OCaml LSP 1.18.0 的預覽版中提供。使用支援 LSP 的編輯器(例如,使用 OCaml Platform 擴充功能的 VSCode)和傳統 Emacs 和 Vim 外掛程式的用戶現在可以查詢 OCaml 術語的專案範圍參照。這需要使用新的 Dune 別名 @ocaml-index
來建立索引。
此版本代表了 Merlin 團隊多年努力的成果,包括在編譯器上進行大量工作,以便為在 Merlin 中實施此功能提供必要資訊。
我們很高興能與社群分享此功能,並期待您的回饋。
雖然此功能在大多數情況下應該運作良好,但我們意識到一些限制。我們的下一步包括新增對介面檔案和模組路徑的支援。請繼續關注!
活動
- 完成了增量出現次數索引和相關 Dune 規則的工作 -- ocaml/dune#10422
- 修正了從介面檔案查詢的問題 -- ocaml/merlin#1779, ocaml/merlin#1781
- 改進了當游標位於標籤/建構子宣告上時的行為 -- ocaml/merlin#1785
- 發佈了
Merlin.5.1-502
、ocaml-index.1.0
,以及新的ocaml-lsp-server
預覽版,支援專案範圍出現次數 -- ocaml/opam-repository#26114 - 在 Discuss 上發布了該版本 -- Merlin 和 LSP 中的專案範圍出現次數
- 為專案範圍出現次數撰寫了維基頁面
- 更新了Merlin 網站
- 更新了平台變更日誌
- 改進了標籤和建構子宣告的處理 (ocaml/merlin#1785)
- 貢獻了編譯器改進
- 實施了實現和介面的不同唯一識別碼 (ocaml/ocaml#13286)
- 開發了連結宣告的唯一識別碼的系統 (ocaml/ocaml#13308)
- 為長標識位置的改進做出貢獻 (ocaml/ocaml#13302)
W19)
縮小 Merlin 和 OCaml LSP 之間的差距 (貢獻者: @xvw (Tarides), @vds (Tarides)
概要:致力於在 Merlin 和 OCaml LSP 之間實現功能對等,以便在所有編輯器中提供一致、功能豐富的開發體驗,使 OCaml LSP 成為 OCaml 編輯器支援的全面後端。
摘要
在六月,我們開始致力於縮小 OCaml LSP 和 Merlin 之間的差距。我們首先在 OCaml LSP 中公開 Merlin 的類型封閉請求。該功能現在以 ocamllsp/typeEnclosing
提供,我們接下來將致力於編輯器整合。
提醒一下,Merlin 的 type-enclosing
功能允許使用者取得游標下識別碼的類型。它會反白顯示識別碼並顯示其類型。使用者可以攀爬類型化的樹狀結構,以顯示游標周圍較大表達式的類型。
自六月以來,我們致力於多個新的 LSP 查詢和程式碼動作,包括
- 一個自訂的
ocamllsp/getDocumentation
查詢,以請求odoc
文件 - 一個自訂的
ocamllsp/construct
查詢,以瀏覽和填寫類型孔 (_
) - 基於 Merlin 的 Jump 命令的語法和語義移動快捷方式的程式碼動作
活動
- 新增了用於類型封閉和文件檢索的自訂查詢
- 類型封閉查詢 (ocaml/ocaml-lsp#1304)
- 文件查詢 (ocaml/ocaml-lsp#1336)
- 建立了一個自訂的 construct 查詢 (ocaml/ocaml-lsp#1348)
- 實施了語義和語法移動快捷方式 (ocaml/ocaml-lsp#1364)
- 向後移植並發佈了具有必要命令的 Merlin 4.16 (opam-repository PR)
- 將
ocaml-lsp
中的Typedtree
使用方式重構為merlin-lib
(ocaml/merlin#1811, ocaml/merlin#1812)