我是 Julia 的新手。我读了一篇关于 julia 静态分析的文档。它提供了一个功能。
function foo(x,y)
z = x + y
return 2 * z
end
并使用 julia 内省函数 code_typed 获取输出:
code_typed(foo,(Int64,Int64))
1-element Array{Any,1}:
:($(Expr(:lambda, {:x,:y}, {{:z},{{:x,Int64,0},{:y,Int64,0},{:z,Int64,18}},{}},
:(begin # none, line 2:
z = (top(box))(Int64,(top(add_int))(x::Int64,y::Int64))::Int64 # line 3:
return (top(box))(Int64,(top(mul_int))(2,z::Int64))::Int64
end::Int64))))
它有一个 Expr 。但是当我调用 code_typed 时,输出是:
code_typed(foo, (Int64,Int64))
1-element Vector{Any}:
CodeInfo(
1 ─ %1 = Base.add_int(x, y)::Int64
│ %2 = Base.mul_int(2, %1)::Int64
└── return %2
) => Int64
它有一个 CodeInfo。它与 doc 中的输出不同。
朱莉娅有什么变化吗?以及如何根据我的函数和 argtypes 获得 Expr?