On Thu, 30 Apr 2009 17:23:19 -0400, Rainer Deyke <rain...@eldwood.com> wrote:
Robert Jacques wrote:
On Thu, 30 Apr 2009 14:40:42 -0400, Rainer Deyke <rain...@eldwood.com>
wrote:
In addition, there's this: suppose you have a struct containing a
(mutable) array.  When you make a copy of that struct, you will almost
always want to make a copy of the contained array.  Therefore value
semantics should be the default, because it simplifies the most common
use case.

That's what struct ctors/dtors/opAssign are for. Personally, I think
letting the struct designer decide the behaviour is better.

I hope you're not suggesting writing ctor/dtor/opAssign for every single
struct that uses arrays as value types.

I'm wasn't _suggesting_ anything. This is how D currently works, and is how any D library you're using that has structs that uses arrays as value types, works. Being surprised at my response gives me the feeling that you've never needed to code what you're talking about. If you have, your concrete example would be helpful as a use case in this discussion.

It's possible to write a reference wrapper around a value type.  It's
also possible to write a value wrapper around a reference type.
However, the former is both easier and more efficient than the latter.

Yes and no. Yes, the deep copy mixin is more complex to write the first time, but after that it's easy to use. And second, it's just as efficient as the later, since the deep copy mixin generates the same code as a value type.

Reply via email to