Yeah, this definitely matters for performance. It is a real shame since the generators are so elegant to use.
inner1(R, i) = sum( R[j,i] for j = 1:size(R,1) ) inner2(R, i) = sum( [R[j,i] for j = 1:size(R,1)] ) function test(R, inner) n = [ inner(R, i)^2 for i = 1:size(R,2) ] N = length(n) s = 0.0 for i = 1:N, j = max(1, i-5):min(N, i+5) s += n[i] * n[j] end return s end R = rand(10, 1000); @time test(R, inner1) @time test(R, inner1) @time test(R, inner1) # 0.002539 seconds (76.02 k allocations: 1.396 MB) # 0.002264 seconds (76.02 k allocations: 1.396 MB) # 0.002094 seconds (76.02 k allocations: 1.396 MB) @time test(R, inner2) @time test(R, inner2) @time test(R, inner2) # 0.000131 seconds (4.01 k allocations: 242.547 KB) # 0.000106 seconds (4.01 k allocations: 242.547 KB) # 0.000104 seconds (4.01 k allocations: 242.547 KB)