Pluto.jl 1.0 发布说明 / 新特性

Pluto.jl 1.0 标志着 Julia 响应式笔记本环境在经过六年的开发后正式进入稳定发布阶段。此次发布重点在于为科学计算和文学编程提供一个可靠、易用且可复现的环境。

核心功能与设计理念

Pluto 是一个面向 Julia 语言的交互式笔记本,其设计理念是优先考虑初学者的易用性,而非仅针对高级用户。与传统的笔记本不同,Pluto 采用响应式执行模型,更改一个单元格会立即更新所有依赖该单元格的其他单元格,类似于电子表格。

关键设计目标包括:

  • 交互性:原生支持按钮、滑块和响应式单元格。
  • 可复现性:严格管理执行顺序和包环境,以确保笔记本在不同用户之间运行结果完全一致。
  • 易用性:专门设计用于支持教育课程,例如 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 API 使用 JavaScript 运行时和高性能的 Julia-JS 连接来构建自定义组件。

出于教育目的,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 使得你意识到相比之下 Jupyter 是多么的不便和不合逻辑。"

相反,一些用户发现布局很反直觉:

"我很喜欢 Pluto,但被‘命令的输出结果显示在创建该命令的单元格上方’这一点完全劝退了。"

其他用户指出,由于每个会话都会创建一个新环境,而不是复用系统根环境,这可能会带来一些小麻烦,但可以通过使用 preamble(前导程序)来解决。

Sources