Julia v1.13.0 版本解读:@FUNCTION 与 Unicode 17,含 hash 破坏性变更
Julia 于 2026-09-09 发布 1.13.0。本版带来新的语言特性与 Unicode 支持,同时包含两处需要迁移注意的破坏性变更(@doc 返回值与 hash 算法),另有若干命令行与多线程改进。
新语言特性
@__FUNCTION__宏:用于引用最近一层包裹函数,适合在通用工具函数内获取调用上下文。- Unicode 17 支持:标准库与语法层支持 Unicode 17 字符。
- 新箭头运算符 U+1F8B2(RIGHTWARDS ARROW WITH LOWER HOOK):按箭头优先级成为合法运算符,REPL 中可用
\hookunderrightarrow输入,为符号化 DSL 提供更多表达空间。
破坏性变更(升级注意)
@doc返回值变化:@doc现在返回被文档化的表达式(函数或类型),此前返回Docs.Binding对象;依赖旧行为的代码需要更新。hash算法与值变化:hash算法在部分类型(最显著的是AbstractString)上发生变化,任何对受影响类型做hash特化的包(如第三方字符串包)需要删除旧覆盖以迁移到新算法;hash(::AbstractString)现在为零拷贝/零成本实现,基于codeunit与iterate的正确实现。
命令行与工具链
--sysimage-native-code=no选项已弃用;JULIA_CPU_TARGET环境变量新增sysimage关键字,可匹配或扩展构建当前系统镜像所用的 CPU target;--code-coverage=all现在会自动丢弃 sysimage 缓存,以准确测量 sysimage 内方法的覆盖率(启动与 startup.jl 之后、用户代码执行前丢弃);- 新增
--trace-eval选项跟踪顶层求值表达式(支持loc/full/no三档),并新增Base.TRACE_EVAL全局控制变量,优先级高于命令行选项; - CI 调试模式下(如 GitHub Actions 的 debug logging 开关)会自动启用
--trace-eval与JULIA_TEST_VERBOSE。
多线程
新增 AbstractSpinLock 抽象类型,为自旋锁实现提供统一的抽象层,便于线程库与并行代码更一致地使用。
适用场景
- 依赖
hash序列化或缓存键(尤其字符串键)的代码与第三方包,升级前必须处理算法迁移; - 使用
@doc做反射/文档工具的代码需同步适配返回值变化; - 符号化 DSL 作者可尝试新的 Unicode 运算符;
- 升级建议:v1.13 存在两处已知破坏性变更,建议先在测试环境跑完整测试套件与依赖升级后再切换默认版本。