バージョン:以降ジュリアv0.4がから段階的プログラミング - ジェイクBolewskiのスピーチ
リファレンス(私は0.5.0-devを+ 433(2015年9月29日15時39 UTC)を使用):Jake Bolewski: Staged programming in Julia
問題:StaticVec
に関するジェイクスBolewskiの演説を見た後、私は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。あなたの例は非常に精巧ですが、私はドキュメントの例を好みますが、あなたの答えは私の予測を確認しています。 –