Consider this Julia program:
f() = Vector{Int}(undef, 128*1024*1024)
(@timed f()).bytes
(r = @timed f()); r.bytes
Why do recent versions of Julia (v1.8 and up) evaluate the second line as 0
? It really seems like the second and third line should be equivalent. This is the result for v1.11:
julia> f() = Vector{Int}(undef, 128*1024*1024)
f (generic function with 1 method)
julia> (@timed f()).bytes
0
julia> (r = @timed f()); r.bytes
1073741888
I guess Julia compiles the entire expression (@timed f()).bytes
, figures out the allocations are unnecessary, and eliminates them?