Issue opened: https://github.com/JuliaLang/julia/issues/14252.

On Thu, Dec 3, 2015 at 11:53 AM, Stefan Karpinski <[email protected]>
wrote:

> I think we should move to having scalar+scalar, scalar+array and
> array+array promotions behave the same. We started out having scalar*scalar
> operations promote quite liberally. For example, Int8+Int8 promoted to Int
> rather than giving an Int8 result even though both arguments are of that
> type, based on the reasoning that we could give a correct value more often
> that way, and the promotion is generally free or cheap on modern CPUs. And
> IIRC, way back in the day Array{Int8}.+Array{Int8} followed this behavior.
> But of course, that's bad for large arrays since the result is then 8x
> larger than either of the arguments. So now we've moved to letting the
> desirable behavior for *array* dictate the behavior for scalars instead of
> the other way around; it's not immediately obvious that it should go in
> this direction, but for a language where arrays are so important, I think
> it's the right way to go. The old scalar behavior was also annoying when
> trying to write type-stable code for scalars. To that end, I would be
> interested in a PR making all scalar+scalar, scalar+array and array+array
> ops behave the same in terms of element types.
>
> On Thu, Dec 3, 2015 at 11:36 AM, Stephan Buchert <[email protected]>
> wrote:
>
>> Yes, certainly one can argue here back and forth:
>>
>> julia> Int32[5730]*86400e3
>> 1-element Array{Float64,1}:
>>  4.95072e11
>>
>> julia> Int32[5730]*86400f3
>> 1-element Array{Float32,1}:
>>  4.95072e11
>>
>> i.e. promotion also here the same as for scalar*scalar. My data are from
>> hardware sensors or counters, which deliver 8, 16 or 32 bit, memory
>> consumption in the computer is normally not an issue.
>>
>> What's wrong with these solutions?
>>> julia> Array{Int64}(Int32[5730])
>>> 1-element Array{Int64,1}:
>>>  5730
>>>
>>> julia> convert(Array{Int64}, Int32[5730])
>>> 1-element Array{Int64,1}:
>>>  5730
>>>
>>> julia> map(Int64, Int32[5730])
>>> 1-element Array{Int64,1}:
>>>  5730
>>
>>
>> Good comprehensive set of solutions, thanks. Still,
>>
>> julia> Int32[5730]*1
>>
>> would be shorter and nevertheless easily readable, according to my taste.
>>
>> Regards,
>> Stephan
>>
>
>

Reply via email to