D safety! New Feature?

Mark J Twain via Digitalmars-d digitalmars-d at puremagic.com
Wed Aug 3 12:40:03 PDT 2016


On Wednesday, 3 August 2016 at 08:09:41 UTC, qznc wrote:
> On Tuesday, 2 August 2016 at 21:48:58 UTC, Mark Twain wrote:
>> global ImmutableArray!int Data;
>>
>>
>> MutableArray!int DataCopy = Data.Copy; // Creates a mutable 
>> copy of Data.
>> ... Do work with DataCopy ...
>> Data.Replace(DataCopy); // Makes a copy of DataCopy.
>
> I see the problem that you cannot compose this. Expand the 
> example to two global arrays:
>
> global ImmutableArray!int Data1;
> global ImmutableArray!int Data2;
>
> MutableArray!int DataCopy1 = Data1.Copy;
> MutableArray!int DataCopy2 = Data2.Copy;
>  ... Do work with DataCopy1 and DataCopy2 ...
> Data1.Replace(DataCopy1);
> // in between state is inconsistent => unsafe
> Data2.Replace(DataCopy2);

I don't see this at all.  What in between state are you talking 
about?  Each object has it's own copy so no inconsistency is 
possible. If you are saying that Data1 and Data2 are suppose to 
be consistent as a pair, then your doing it wrong. You should 
combine them in to a single structure. The same problem would 
exist with other techniques. You have acted like the order of 
declaration matters but your example, given the information, can 
be written as

> global ImmutableArray!int Data1;
> MutableArray!int DataCopy1 = Data1.Copy;
//....
> Data1.Replace(DataCopy1);


> global ImmutableArray!int Data2;
> MutableArray!int DataCopy2 = Data2.Copy;
//....
> Data2.Replace(DataCopy2);







More information about the Digitalmars-d mailing list