Deque impl.

monarch_dodra monarchdodra at gmail.com
Thu Jan 31 04:00:11 PST 2013


On Thursday, 31 January 2013 at 11:35:31 UTC, d coder wrote:
> On Thu, Jan 31, 2013 at 2:43 PM, Robert burner Schadek
> <realburner at gmx.de> wrote:
>> Thats not totally correct. The Rb tree is a class. But the 
>> real reason for
>> the Deque being a class
>> is that it holds two value members. And if you pass the Deque 
>> around you
>> need to do this as ref.
>> Otherwise you shall not call any method that modifies this 
>> value members,
>> because this will only be
>> visible at the calling site.
>
> I would expect all the containers in the std.container to have 
> either
> pass by value or pass by reference semantics. It seems at least 
> Array,
> Slist, and Dlist are structs and they follow pass by value 
> semantics.
>
>>From Dlang.org:
>
> auto a = DList!int([3, 4]); //Create a new chain
> auto b = a; //Point to the same chain
> // (3 - 4)
> assert(a[].equal([3, 4]));
> assert(b[].equal([3, 4]));
>
> b.stableInsertFront(1); //insert before of b
> b.stableInsertBack(5); //insert after of b
> // (2 - (3 - 4) - 5)
> assert(a[].equal([3, 4])); //a is not changed
> assert(b[].equal([1, 3, 4, 5])); // but b is changed
>
>
> Regards
> - Puneet

Technically, all containers in std.container need to adhere to 
reference semantics when passed by value, regardless of if they 
are classes or structs.

For example, AA's can be considered structs, but when passed, 
they still adhere to reference semantics.

---------
In regards to DList: I wrote that code and documentation.

The truth is that DList was written with absolutely 0 concern to 
what might happen if you mutate a copy. While correcting the 
code, I preserved the old semantic (accidental) semantic, which 
was kind of weird.

The mistake was to document said semantic. It makes no sense. I 
should never even have preserved that semantic in the first place 
anyways. There is now a new version in the tubes for Dlist, to 
make it behave the way you'd expect it to:

https://github.com/D-Programming-Language/phobos/pull/953

The pull is kind of stuck in limbo, specifically because of the 
problems associated with implementing reference semantics with 
structs :/


More information about the Digitalmars-d mailing list