What is the difference between map(f, v) and [f(x) for x in v]?

Hi,

Take a look at the following code:

using BenchmarkTools
s = ["$n" for n in 1:10000];
@btime map(x->parse(Int, x), s);
# 174.666 μs (3 allocations: 78.19 KiB)
@btime [x->parse(Int, x) for x in s];
# 3.401 μs (2 allocations: 64 bytes)

why is there such a huge difference?

I assumed these two implementations were practically interchangeable.’

Thanks,
DD

The second statement produces a vector of functions, not the values of the function x->parse(Int, x) applied to the elements of s!

julia> [x->parse(Int, x) for x in s]
10000-element Vector{var"#57#59"}:
 #57 (generic function with 1 method)
 #57 (generic function with 1 method)
 #57 (generic function with 1 method)
[...]

Compare

julia> @btime [parse(Int, x) for x in $s]
  329.400 μs (3 allocations: 78.19 KiB)

julia> @btime map(x->parse(Int, x), $s);
  321.900 μs (2 allocations: 78.17 KiB)

Oops, you are obviously right.
Should have been:

@btime [parse(Int, x) for x in s];
# 174.500 μs (3 allocations: 78.19 KiB)

which is exactly the same