This is a known limitation of Julia.  The trouble is that Julia cannot
do its type interference with the passed in function.  I don't have time
to search for the relevant issues but you should be able to find them.
Similarly, lambdas also suffer from this.  Hopefully this will be
resolved soon!

On Wed, 2015-03-25 at 19:41, Phil Tomson <[email protected]> wrote:
>  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

Reply via email to