When x is of type T, convert(T,x) is a no-op:
julia> function myfunc(x)
a = convert(Float64, x)
return a
end
myfunc (generic function with 1 method)
julia> code_native(myfunc, (Float32,))
.text
Filename: none
Source line: 2
push RBP
mov RBP, RSP
Source line: 2
movabs RAX, 140048916337192
movss DWORD PTR [RAX], XMM0
movss XMM0, DWORD PTR [RAX]
cvtss2sd XMM0, XMM0
Source line: 3
pop RBP
ret
julia> code_native(myfunc, (Float64,))
.text
Filename: none
Source line: 3
push RBP
mov RBP, RSP
Source line: 3
pop RBP
ret
--Tim
On Saturday, April 26, 2014 08:45:21 AM Jarrett Revels wrote:
> Hello all,
>
> I was exploring some of the base code today when I saw the implementation
> of setindex!():
>
>
> setindex!{T}(A::Array{T}, x, i0::Real) = arrayset(A, convert(T,x),
> to_index(i0))
>
> I was surprised that I couldn't find setindex!() methods for elements that
> used the type system to forego the use of convert() seen above. For
> example, wouldn't it be better to also define methods of the form
>
> setindex!{T}(A::Array{T}, x::T, i0::Real) = arrayset(A, x, to_index(i0))
>
> so that conversion only occurs when necessary?
>
> I would be willing to make the changes myself, but I assume that there is a
> reason for this design choice that I'm just seeing.