版本:從朱莉婭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。雖然你的例子非常精細,我更喜歡文檔中的例子,但是你的答案已經證實了我的預測。 –