适配Julia 1.9.3时ARM Remez代码遇world age及数组声明问题
Julia 1.9.3适配ARM Remez代码的两个问题解决
一、数组声明问题(原Array(BigFloat, n+1)的改写)
Julia 0.4到1.9的数组构造语法有明确变更,原代码中声明指定长度的BigFloat一维数组,可根据初始化需求选择以下写法:
- 未初始化数组(完全对应原0.4版本行为):
a = Vector{BigFloat}(undef, n+1) - 初始化为0的数组:
a = zeros(BigFloat, n+1) - 初始化为1的数组:
a = ones(BigFloat, n+1)
二、World Age Mismatch问题(提示"function is too new")
针对命令行传入的sin(x)包装函数引发的该错误,可通过以下方式解决:
- 用
Base.invokelatest调用包装函数:将原本调用包装函数的代码(比如my_sin_wrapper(x))替换为Base.invokelatest(my_sin_wrapper, x)。这个函数会强制在当前最新的world age中执行调用,绕过编译时的world age检查。 - 若包装函数是动态生成的,确保函数定义完成后再触发编译逻辑,或者将动态函数的调用逻辑放在运行时执行的代码块中,避免编译阶段尝试调用尚未生成的函数。
内容的提问来源于stack exchange,提问作者Martin Brown
相关产品推荐
相关产品推荐

