版本:从朱莉娅V0.4起(我用0.5.0-dev的+ 433(2015年9月29日15:39 UTC))上演节目 - 杰克Bolewski的讲话
参考:Jake Bolewski: Staged programming in Julia
问题:看杰克斯Bolewski的关于StaticVec
演讲结束后我没赶上例子背后的理念与length
功能。
julia> type StaticVec{T,N}
vals::Vector{T}
end
julia> StaticVec(T,vals...) = StaticVec{T,length(vals)}([vals...])
StaticVec{T,N}
julia> v= StaticVec(Float64,1,2,3)
StaticVec{Float64,3}([1.0,2.0,3.0])
非上演length
:
julia> function Base.length{T,N}(v::StaticVec{T,N})
N
end
length (generic function with 58 methods)
julia> code_llvm(length, (StaticVec{Float64,3},))
define i64 @julia_length_21889(%jl_value_t*) {
top:
ret i64 3
}
,并上演length
版本
julia> @generated function Base.length{T,N}(v::StaticVec{T,N})
:(N)
end
length (generic function with 58 methods)
julia> code_llvm(length, (StaticVec{Float64,3},))
define i64 @julia_length_21888(%jl_value_t*) {
top:
ret i64 3
}
给出相同的LLVM代码。
我想我明白舞台编程背后的想法,但在这个特殊的例子中,我不明白演讲者的意图。任何人都可以向我解释吗?
谢谢Stefan。虽然你的例子非常精细,我更喜欢文档中的例子,但是你的答案已经证实了我的预测。 –