2017-11-09 11 views
2

줄리아에서 벡터 (특히 Vector{Complex128})를받는 함수를 정의하려고합니다. @code_warntype의 출력을 보면 변수 유형이 Any으로 나열되어 있습니다. 내가 이해하는 바와 같이 이것은 잠재적으로 속도에 영향을 줄 수 있습니다. @code_warntype에서왜 줄리아는 함수 인수로 전달 된 배열의 형식을 인식하지 못하고 대신 Any로 나열합니까?

function abc(h::Vector{Complex128}) 
    a=1+2 
end 

출력은

julia> @code_warntype abc(zeros(Complex128,2)) 
Variables: 
    #self#::#abc 
    h::Any 
    a::Int64 

Body: 
    begin 
    SSAValue(0) = (Base.add_int)(1, 2)::Int64 
    return SSAValue(0) 
    end::Int64 

Any으로 나열 가변 h 유형이다 : 여기에서, 예를 들면 코드의 간단한 버전이다. 나는 줄리아에 처음 왔고 여기에 뭔가 빠졌는 지 실제로 알지 못합니다. 이 동작은 Vector{Complex128}에만 해당되는 것 같지 않으며, Vector{Float64}과 동일한 동작을합니다. 여기에 변수 유형에 주석을 달고 있습니까? 아니면 어떻게 작동해야합니까? 그게 문제라면 julia v0.6.0을 사용하고 있습니다.

답변

5

이것은 컴파일러가이를 최적화하여 멀리 있기 때문에 발생합니다. 인쇄 방법이 v0.6.1에서보다 명확하게 변경되었습니다.

julia> function abc(h::Vector{Complex128}) 
      a=1+2 
     end 
abc (generic function with 1 method) 

julia> @code_warntype abc(zeros(Complex128,2)) 
Variables: 
    #self# <optimized out> 
    h <optimized out> 
    a <optimized out> 

Body: 
    begin 
     SSAValue(0) = (Base.add_int)(1, 2)::Int64 
     return SSAValue(0) 
    end::Int64