syntax sugar: std.path::buildPath instead of from!"std.path".buildPath
ZombineDev via Digitalmars-d
digitalmars-d at puremagic.com
Thu Feb 16 01:55:08 PST 2017
On Thursday, 16 February 2017 at 07:34:02 UTC, Jacob Carlborg
wrote:
> On 2017-02-16 01:37, ZombineDev wrote:
>
>> BTW, shouldn't we use `enum`, instead of `auto`, since
>> everywhere else
>> `enum` means guaranteed to be computed at compile-time whereas
>> `auto`
>> means the opposite?
>
> Far enough, since it's not possible to change the parameter
> inside the function anyway.
>
> Question though, what happens with an array literal, example:
>
> void foo(int[] a = [1, 2, 3])()
> {
> auto b = a; // allocation ?
> auto c = a; // allocation ?
> }
>
> As far as I understand, if an array is declared as a manifest
> constant it will cause a new allocation for each time it's used.
>
> enum a = [1, 2, 3];
> auto b = a; // new allocation
> auto c = a; // new allocation
>
> What happens when an array literal is a default value for a
> template parameter?
enums are just literals - values without identity. This means
that if you need them at runtime, the compiler will need to
allocate storage for each time they are used. In cases where such
a values is used in more places, it may be more economical to
assign it to a static immutable variable and reference it in
place of the enum.
In the case of template parameters I would expect this to be even
more true, because an array by definition is a contiguous chunk
of memory and a template parameter is something encoded in the
mangled name of the symbol at runtime, so the compiler can't get
away from allocating additional storage for each usage of the
template value parameter at runtime.
(@compiler devs, please correct me if I am wrong)
More information about the Digitalmars-d
mailing list