When is a slice not a slice?

Rene Zwanenburg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 6 03:14:30 PDT 2014


On Friday, 6 June 2014 at 08:17:43 UTC, Alix Pexton wrote:
> On 05/06/2014 8:58 PM, Steven Schveighoffer wrote:
>> On Thu, 05 Jun 2014 15:56:00 -0400, Philippe Sigaud via
>> Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> wrote:
>>
>>>>        enum b = DataAndView(1);
>>>>        assert (!sameTail(b.data, b.view));
>>>
>>> I suppose it's because enums are manifest constants: the 
>>> value they
>>> represent is 'copy-pasted' anew everywhere it appears in the 
>>> code. So
>>> for arrays and associative arrays, it means recreating a new 
>>> value
>>> each and every time.
>>> In your case, your code is equivalent to:
>>>
>>> assert (!sameTail(DataAndView(1).data,DataAndView(1).view));
>>>
>>> And the two DataAndView(1), being completely separated, do 
>>> not have
>>> the same tail.
>>
>> Yes, this should work (and execute the initializer at compile 
>> time):
>>
>> static b = ...
>>
>> -Steve
>
> Ah, the problem with static is that I want to use the values at 
> compile time to create other values. Using static puts 
> construction between compile time and run time. Initialising in 
> static this means that the symbols need to be declared without 
> initializers and that means not disabling default construction
> ><
>
> A...

Immutables should be usable at compile time and not allocate a 
new instance on every use when in module scope.


More information about the Digitalmars-d-learn mailing list