On Sunday, 8 May 2016 at 23:48:01 UTC, Erik Smith wrote:
Thanks! The static array version works for me too. It would be good to understand more about what is going on. It looks like the cost of the static array is an extra copy for each element. Maybe there is still a way to avoid that.

The difference is quite simple: my latest version does save copy of arguments in static array which means you can freely pass it around with referenced data being valid. But it may become expensive to copy with large argument lists if compiler can't optimize it away. Ali version generates a compile-time switch for index that returns either literals or external variables by referencing their symbol directly. If this gets used to reference external stack variables which later get out of scope, range may either start iterating over garbage memory or silently allocate a closure (don't remember which is the case for latest compiler).

In practice, if you use good inlining compiler, like LDC, I'd say static array version is strictly better. It is guaranteed to be safe and RVO allows compiler to completely get rid of additional stack copies if usage scope is limited.

Reply via email to