Pluto.jl 1.0 發佈說明 / 新功能

Pluto.jl 1.0 標誌著 Julia 反應式筆記本環境在經過六年的開發後轉向穩定版本。此次發佈專注於為科學計算和文獻編程(literate programming)提供一個可靠、易於使用且具備可重現性的環境。

核心功能與設計理念

Pluto 是一個針對 Julia 語言的互動式筆記本,其設計優先考慮初學者的易用性,而非進階用戶。與傳統筆記本不同,Pluto 使用反應式執行模型,更改一個單元格(cell)會立即更新所有相依的單元格,類似於試算表。

關鍵設計目標包括:

  • 互動性:原生支持按鈕、滑桿和反應式單元格。
  • 可重現性:嚴格管理執行順序和套件環境,以確保筆記本在不同用戶之間運行結果一致。
  • 易用性:專門為教育課程設計,例如 MIT 的 Computational Thinking。

可重現性與套件管理

Pluto 1.0 通過約 2,500 個自動測試案例(包括基於 UI 的瀏覽器測試)確保了高度的可靠性。

自動環境處理

每個筆記本都在隔離的套件環境中運行。套件會根據需要自動添加或移除。為了進一步增強不同 Julia 版本之間的可重現性,Pluto 使用了 GracefulPkg.jl 並提供專用的 Project.toml 編輯器以進行精確的版本控制。它還支持 Julia 的 [sources] 功能,以便從 GitHub 進行可重現的套件導入。

分享與匯出工作

Pluto 筆記本可以匯出為 Julia 源代碼、PDF 和 HTML。HTML 匯出是自包含的,會將筆記本渲染成與匯出時完全相同的樣子,包括 Julia 源代碼和套件環境。截至 2025 年,這些 Web 資產也是自包含的,允許在沒有網路連接的情況下打開 HTML 匯出文件。

Web 發佈工具

  • pluto.land:一個用於分享 Pluto HTML 匯出的免費 Web 服務。
  • static-export-template:一個用於從筆記本儲存庫生成網站的工具。
  • PlutoSliderServer.jl:一個用於託管 Pluto 基礎網站的服務,讓訪客可以保持互動性。

反應性與執行控制

Pluto 的反應式特性允許快速實驗,但此次發佈引入了工具來管理長時間運行的計算:

  • 單元格禁用:用戶可以禁用特定的單元格。由於系統是反應式的,任何依賴於被禁用單元格的單元格也會自動被禁用,允許用戶通過單個動作關閉筆記本的大部分區域。
  • 運行時確認:Pluto 現在會在觸發預期根據先前執行歷史記錄會耗時較長的反應式單元格鏈時,提示用戶進行確認。

互動性與 UI 組件

PlutoUI.jl 提供了一套全面的輸入組件(widgets),包括滑桿、開關、切換器、按鈕、下拉選單、多選器和文本框。對於進階用戶,可以使用 JavaScript 運行時和高性能的 Julia-JS 連接來通過專用的 Widgets API 構建自定義組件。

為了教育目的,PlutoTeachingTools.jl 為創建互動式講座和能對學生輸入做出反應的即時作業提供了專用工具。

教育功能與錯誤處理

Pluto 是針對學生進行了深度優化的。該環境具有改進的錯誤體驗,旨在減少學生的挫折感:

  • 簡化堆疊追蹤(Stack Traces):內部的 Julia 函數會變淡,堆疊追蹤可以通過點擊來展開或摺疊。
  • 上下文預覽:編輯器會在錯誤訊息中提供用戶自定義代碼的微型預覽。
  • PlutoTurtles.jl:一個專門用於通過互動式繪圖教學基礎編程的套件。

此外,computational-thinking-template 提供了一個儲存庫模板,用於構建具有內置搜索和 GitHub Actions 集成功能的課程網站。

編輯器工具與 AI 集成

Pluto 現在使用在 CodeMirror 6 中運行的全新 Julia 解析器,從而實現了更高效的語法模式匹配。

代碼編輯增強功能

  • 自動補全:一個結合了靜態 JS 分析、作用域分析和 Julia REPL 結果的系統。
  • 開發者工具:支持跳轉到定義、混合語言解析(在 Julia 中使用 Python/SQL/HTML)以及 ANSI 顏色渲染。
  • 豐富的對象查看器:提供 LaTeX、SVG、PNG 的高性能顯示,以及用於複雜數據結構的互動式樹狀查看器。

AI 能力

Pluto 對 AI 的做法是保守的;它並非旨在作為一個「vibe coding」工具。唯一的 AI 驅動功能是自動修復語法錯誤(例如,缺失的 end 或引號)。這些功能可以在設置中禁用。

生態系統與治理

Pluto 已向更廣泛的 Julia 生態系統貢獻了多個工具套件,包括 Malt.jl, HypertextLiteral.jl, GracefulPkg.jl, MIMEs.jl, ExpressionExplorer.jl, 和 PlutoDependencyExplorer.jl

該項目已轉向正式的治理結構,並由 GitHub 上的 JuliaPluto 組織管理。

社群觀點

雖然此次發佈因其反應式模型而受到讚譽,但社群回饋也突出了其優點與缺點:

"反應式筆記本好用得多。使用 Pluto 或 Livebook Makes 讓你意識到 Jupyter Notebooks 是多麼的不便與不合邏輯。"

相反,有些用戶覺得佈局很反直覺:

"我會喜歡 Pluto,但我完全被其命令的輸出結果顯示在創建該命令的單元格上方這一點給嚇退了。"

其他用戶指出,對於每個會話(session)都創建一個新環境而不是重用系統根目錄的做法,可能會造成一些小困擾,儘管這可以通過 preamble 解決。

Sources