【发布时间】:2016-06-17 03:24:47
【问题描述】:
如果我们运行:
@code_warntype deepcopy(rand(2))
在 Julia REPL 中,输出包含 Body 表达式中的标记值。具体来说,末尾的两个Any:
Body:
begin # deepcopy.jl, line 8:
GenSym(0) = (Base.Array)(Base.Any,32)::Array{Any,1}
return (Base.deepcopy_internal)(x::Array{Float64,1},$(Expr(:new, :((top(getfield))(Base,:ObjectIdDict)::Type{ObjectIdDict}), GenSym(0))))::Any
end::Any
我从this question 了解到,如果我们主要关心的是类型不稳定,我们通常不需要担心 Body 表达式中的标记值。所以相反,我的问题是:
为什么Base 中的一个相当简单的函数会在@code_warntype 中生成任何 标记值?我确信有充分的理由,但我在解释 @code_warntype 的输出方面是新手,并且在理解官方文档中对 Body 表达式的讨论时遇到了一些麻烦。
【问题讨论】:
-
我编辑了这个答案,以便澄清返回类型也是需要担心的问题。
-
@tholy 明白了。非常感谢。我也可以看到你负责修复,所以也感谢(我经常使用
deepcopy):-)
标签: julia