DIP69 - Implement scope for escape proof references
Nick Treleaven via Digitalmars-d
digitalmars-d at puremagic.com
Sun Dec 7 09:30:25 PST 2014
On 04/12/2014 12:55, bearophile wrote:
> Regarding array literals, some people proposed a syntax for fixed-size
> arrays to avoid heap-allocations (the "s" after the array literal):
>
> void foo(int[2]) {}
> void bar(scope int[]) {}
> void main() @nogc {
> foo([1, 2]s);
> bar([1, 2]s);
> }
I think even if the compiler could infer them as static arrays, it may
still be useful to be explicit sometimes. We can already use a library
template:
template staticArray(items...)
{
import std.traits;
alias T = CommonType!items[items.length];
enum T staticArray = [items];
}
auto s = staticArray!(1, 2);
static assert(is(typeof(s) == int[2]));
bar(staticArray!(1, 2));
This might also make the proposed 'int[$] = [...];' syntax unnecessary.
I think jmdavis once wrote something similar - although I've used enum
here in case it helps avoid function template bloat.
More information about the Digitalmars-d
mailing list