Maybe this is just obvious, but it's not making much sense to me. If I have a reference to a function (pardon if that's not the correct Julia-ish terminology - basically just a variable that holds a Function type) and call it, it runs much more slowly (persumably because it's allocating a lot more memory) than it would if I make the same call with the function directly.
Maybe that's not so clear, so let me show an example using the abs function: function test_time() sum = 1.0 for i in 1:1000000 sum += abs(sum) end sum end Run it a few times with @time: julia> @time test_time() elapsed time: 0.007576883 seconds (96 bytes allocated) Inf julia> @time test_time() elapsed time: 0.002058207 seconds (96 bytes allocated) Inf julia> @time test_time() elapsed time: 0.005015882 seconds (96 bytes allocated) Inf Now let's try a modified version that takes a Function on the input: function test_time(func::Function) sum = 1.0 for i in 1:1000000 sum += func(sum) end sum end So essentially the same function, but this time the function is passed in. Running this version a few times: julia> @time test_time(abs) elapsed time: 0.066612994 seconds (32000080 bytes allocated, 31.05% gc time) Inf julia> @time test_time(abs) elapsed time: 0.064705561 seconds (32000080 bytes allocated, 31.16% gc time) Inf So roughly 10X slower, probably because of the much larger amount of memory allocated (32000080 bytes vs. 96 bytes) Why does the second version allocate so much more memory? (I'm running Julia 0.3.6 for this testcase) Phil