Versione: da Julia v0.4 in poi (io uso 0.5.0-dev + 433 (2015/09/29 15:39 UTC))programmazione Staged - Il discorso di Jake Bolewski
Riferimento: Jake Bolewski: Staged programming in Julia
Problema: Dopo aver visto il discorso di Jakes Bolewski riguardo StaticVec
non ho capito l'idea dietro l'esempio con la funzione 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])
non messo in scena 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
}
e messo in scena length
versione
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
}
dare lo stesso codice LLVM.
Suppongo di aver compreso l'idea alla base della programmazione a fasi, ma in questo particolare esempio non capisco l'intenzione dell'altoparlante. Qualcuno potrebbe spiegarmelo?
Grazie Stefan. Sebbene il tuo esempio sia piuttosto elaborato e preferisco un esempio dalla documentazione, tuttavia la tua risposta ha confermato la mia previsione. –