We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Version 0.5 で Core.Box というのが出るのですが,これは何なのでしょう.
Core.Box
function f(a::Array) length(a) == 0 && throw(ArgumentError()) sz = size(a) [sz for i in 1:1] end
julia> @code_warntype f(ones(1, 2, 3)) Variables: #self#::#f a::Array{Float64,3} sz::Core.Box #1::##1#2 Body: begin sz::Core.Box = $(Expr(:new, :(Core.Box))) NewvarNode(:(#1::##1#2)) unless ((Base.arraylen)(a::Array{Float64,3})::Int64 === 0)::Bool goto 5 (Main.throw)((Main.ArgumentError)()::Any)::Union{} 5: # line 3: # meta: location array.jl size 20 # meta: location array.jl _size 24 SSAValue(9) = (Base.arraysize)(a::Array{Float64,3},(Base.box)(Int64,(Base.add_int)(0,1)))::Int64 # meta: location array.jl _size 24 SSAValue(7) = SSAValue(9) SSAValue(8) = (Base.arraysize)(a::Array{Float64,3},(Base.box)(Int64,(Base.add_int)(1,1)))::Int64 # meta: location array.jl _size 24 SSAValue(6) = (Core.tuple)(SSAValue(7),SSAValue(8),(Base.arraysize)(a::Array{Float64,3},(Base.box)(Int64,(Base.add_int)(2,1)))::Int64)::Tuple{Int64,Int64,Int64} # meta: pop location # meta: pop location # meta: pop location # meta: pop location SSAValue(0) = SSAValue(6) (Core.setfield!)(sz::Core.Box,:contents,SSAValue(0))::Tuple{Int64,Int64,Int64} # line 4: #1::##1#2 = $(Expr(:new, :(Main.##1#2), :(sz))) SSAValue(1) = #1::##1#2 SSAValue(2) = $(Expr(:new, UnitRange{Int64}, 1, :((Base.select_value)((Base.sle_int)(1,1)::Bool,1,(Base.box)(Int64,(Base.sub_int)(1,1)))::Int64))) SSAValue(3) = $(Expr(:new, Base.Generator{UnitRange{Int64},##1#2}, SSAValue(1), SSAValue(2))) return $(Expr(:invoke, LambdaInfo for collect(::Base.Generator{UnitRange{Int64},##1#2}), :(Base.collect), SSAValue(3))) end::AbstractArray{T,N}
順番を変えるとなぜかでなくなります.
function g(a::Array) sz = size(a) length(a) == 0 && throw(ArgumentError()) [sz for i in 1:1] end
julia> @code_warntype g(ones(1, 2, 3)) Variables: #self#::#g a::Array{Float64,3} sz::Tuple{Int64,Int64,Int64} #3::##3#4{Tuple{Int64,Int64,Int64}} Body: begin NewvarNode(:(#3::##3#4{Tuple{Int64,Int64,Int64}})) # meta: location array.jl size 20 # meta: location array.jl _size 24 SSAValue(8) = (Base.arraysize)(a::Array{Float64,3},(Base.box)(Int64,(Base.add_int)(0,1)))::Int64 # meta: location array.jl _size 24 SSAValue(6) = SSAValue(8) SSAValue(7) = (Base.arraysize)(a::Array{Float64,3},(Base.box)(Int64,(Base.add_int)(1,1)))::Int64 # meta: location array.jl _size 24 SSAValue(5) = (Core.tuple)(SSAValue(6),SSAValue(7),(Base.arraysize)(a::Array{Float64,3},(Base.box)(Int64,(Base.add_int)(2,1)))::Int64)::Tuple{Int64,Int64,Int64} # meta: pop location # meta: pop location # meta: pop location # meta: pop location sz::Tuple{Int64,Int64,Int64} = SSAValue(5) # line 3: unless ((Base.arraylen)(a::Array{Float64,3})::Int64 === 0)::Bool goto 18 (Main.throw)((Main.ArgumentError)()::Any)::Union{} 18: # line 4: #3::##3#4{Tuple{Int64,Int64,Int64}} = $(Expr(:new, ##3#4{Tuple{Int64,Int64,Int64}}, :(sz))) SSAValue(0) = #3::##3#4{Tuple{Int64,Int64,Int64}} SSAValue(1) = $(Expr(:new, UnitRange{Int64}, 1, :((Base.select_value)((Base.sle_int)(1,1)::Bool,1,(Base.box)(Int64,(Base.sub_int)(1,1)))::Int64))) SSAValue(2) = $(Expr(:new, Base.Generator{UnitRange{Int64},##3#4{Tuple{Int64,Int64,Int64}}}, SSAValue(0), SSAValue(1))) return $(Expr(:invoke, LambdaInfo for collect(::Base.Generator{UnitRange{Int64},##3#4{Tuple{Int64,Int64,Int64}}}), :(Base.collect), SSAValue(2))) end::Array{Tuple{Int64,Int64,Int64},1}
The text was updated successfully, but these errors were encountered:
オブジェクトがgarbage collectionで回収されるJuliaのheapにallocateされることを表すものだと思います (http://julia.readthedocs.io/en/latest/manual/embedding/#converting-types)。動作が違うのは私にはバグにしか見えないので、未報告でしたらJuliaのGitHubでissueとして報告するのが良いと思います。
Sorry, something went wrong.
No branches or pull requests
Version 0.5 で
Core.Box
というのが出るのですが,これは何なのでしょう.順番を変えるとなぜかでなくなります.
The text was updated successfully, but these errors were encountered: