Julia 版本 1.11 终于发布,感谢所有贡献者和测试者。完整变更列表见NEWS 文件,以下是一些发布亮点:
- 1.10 成为 LTS 版本:1.11 发布后,1.10 成为 LTS 版本,可使用
juliaup
和julia-actions/setup-julia
的lts
版本规范符。 Array
在 Julia 中实现,新Memory
类型:Julia 1.11 前Array
是特殊对象,操作在 C 中完成有开销,现在添加新的Memory
类型,可在 Julia 代码中重新实现Array
,提高了性能,例如push!
操作快约 2 倍,Base 中的一些类型使用内存略少,此新功能在 JuliaCon 上展示。- 新
public
关键字:之前无“程序化方式”判断未导出名称是否为公共 API 的一部分,现在有public
关键字可指示未导出名称为公共 API 的一部分,可通过Base.ispublic
方法检查,此新功能在 JuliaCon 上展示。 - 清单版本控制:
Manifest.toml
文件可重命名为Manifest-v{major}.{minor}.toml
格式,优先被特定 Julia 版本使用,便于管理多个 Julia 版本的环境。 - 改进 REPL 中的制表完成和提示:1.11 中制表完成更强大,有单一项完成时可获得内联提示,可通过
startup.jl
禁用提示。 - Pkg.jl 中 Project.toml 的 Sources 部分:可在 Project 文件中指定未注册依赖的信息,此功能在 JuliaCon 上展示。
- 预编译文件可重定位:启用缓存文件的重定位,配合其他改进有助于 Pkg.jl 提供缓存文件,遵循 Pkg.jl 的最佳实践可自动启用重定位,避免使用绝对路径或相对路径。
- 标准库切除:1.10 引入包图像后开始将标准库移出系统图像,减小 Julia 系统图像大小,启动小脚本更快,标准库有了自己的版本号,旨在加快标准库的开发并降低贡献的门槛。
- ScopedValues:提供配置参数的替代方案,通过示例展示了在 Web 应用中实现权限检查的用法。
- 新的主入口点:Julia 的入口点标准化为
Main.main(args)
,需使用@main
宏显式选择,运行脚本或表达式时julia
会自动运行Main.main
函数,交互使用时定义main
函数和直接执行代码无语义差异。 @time
宏现在报告锁冲突:@time
宏现在会报告调用中的锁争用次数,可帮助发现可能影响并发性能的设计问题。推理增强:
- 异常类型推理:Julia 编译器现在能够推断异常对象的类型,提高
catch
块中的类型稳定性,但准确性尚不高,一般在try
块包含基本函数时效果较好。 - 逃逸分析:
Core.Compiler.EscapeAnalysis
在 v1.11 中选择性地在实际编译管道中启用,旨在提高涉及非逃逸可变分配的方法的效果分析精度,但目前精度不高,未用于其他目的,计划继续改进并应用于各种优化。
- 异常类型推理:Julia 编译器现在能够推断异常对象的类型,提高
- 致谢:此版本的准备部分由 NASA 资助,意见等不代表 NASA 观点。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。