On 29 March 2017 at 15:34, Paul Moore <p.f.mo...@gmail.com> wrote: > So the big difference is removing def from roll, with removing def > from rng having a smaller but detectable effect.
I just tried to generalise the script, by making a simulate function that takes the action as a closure. I won't post all the code here, but basically: def simulate = { N, cl -> def results = ... N.times { int n = cl() results[n]++ } // Report the results } simulate(1000000) { ... body of roll() here } This took 20 seconds to run. It's certainly possible I've made a stupid mistake here, but I thought that doing this was essentially a simple refactoring of the original code, and I'm pretty surprised to see a 40x increase in runtime. Before I spend ages hunting for my mistake, is there any obvious reason why this *isn't* just a refactoring, and I should have expected it to run a lot slower? (If nothing else, this is a great learning exercise for me :-)) Thanks, Paul