Say I have 2 functions:
function f1(i::Int)
    i
end
function f2(i::Int)
    2*i
end
I have these 2 ways of aliasing them:
f = f1
g(i::Int) = f1(i)
Calling either f or g give the right result, but somehow, calling f results in more memory allocation.  Why is that?
             
            
              
              
              
            
            
           
          
            
            
              f is a global scope variable that can change during the lifetime of your program. Julia has to compile code that does not become invalid if you later set f=0.
You can later on add/redefine methods for the function f1 and julia is capable of tracking which compiled methods need to be invalidated / recompiled. Julia is not willing to track the same for global non-constant variables.
TLDR: const f=f1
             
            
              
              
              1 Like