Julia 1.11 亮点

Julia 版本 1.11 终于发布,感谢所有贡献者和测试者。完整变更列表见NEWS 文件,以下是一些发布亮点:

  • 1.10 成为 LTS 版本:1.11 发布后,1.10 成为 LTS 版本,可使用juliaupjulia-actions/setup-julialts版本规范符。
  • 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 中选择性地在实际编译管道中启用,旨在提高涉及非逃逸可变分配的方法的效果分析精度,但目前精度不高,未用于其他目的,计划继续改进并应用于各种优化。
  • 致谢:此版本的准备部分由 NASA 资助,意见等不代表 NASA 观点。
阅读 17
0 条评论