This doesn't solve the problem. The code initializing aconst should be only evaluated once! Consider: test(x=[]) = push!(x, 1) let x=[] global test2 test2() = push!(x, 1) end
test() # -> Any[1] test() # -> Any[1] test2() # -> Any[1] test2() # -> Any[1,1] This can be useful, either because initializing x is very expensive, or because you're gathering some resource. Am Mittwoch, 11. Februar 2015 17:20:02 UTC+1 schrieb Simon Danisch: > > Hi, > I was trying to find out, what the best way is to have some local, > constant storage for a function, which is only accessible from inside the > function > So something like this: > begin > const local a = [] > test() = dosomething(a) > end > > I was quite surprised, that you can't do this efficiently. > Or at least I didn't find a way, or tested it incorrectly. > Here are the different combinations I tried and the emitted native code: > > https://gist.github.com/SimonDanisch/e4bed0a16bdd847a8c2b#file-local_function_storage-jl > > test11 && test12 seems to be what julia does internally for test1-test4 > (and the example here) > It's especially odd, as a global const seems to be faster than a local > const, even though that the local version is more restricted. > Is this because there has been more time spend on making globals fast? > > Best, > Simon >
