confused with some_var.dup

Christopher Wright dhasenan at gmail.com
Sat Jan 17 08:38:09 PST 2009


Rainer Deyke wrote:
> Christopher Wright wrote:
>> You can create a COW array struct pretty easily. However, this will be
>> pretty slow in a lot of cases.
> 
> A built-in COW type does not need to be slow!  The compiler can use
> static analysis to eliminate unnecessary copies, and reference counting
> can be used to further reduce the number of copies.

True. Though you'd need syntax for COW arrays and non-COW arrays. Same 
for structs. It makes the language more complicated, and it makes the 
compiler even more complicated.

>> When you're building the array, you really don't want COW semantics.
>> This will overallocate -- O(n**2) memory required rather than O(n). When
>> you're mutating large portions, you still don't want COW semantics for
>> the same reason.
> 
> This would not be a problem with a built-in COW type.  The compiler can
> see that the array is being modified, but not copied, in a block, so it
> places a single copy operation at the beginning of the block.
> 
> The messy sometimes-a-reference-and-sometimes-a-value semantics of D
> arrays are one of the reasons why I still prefer C++ over D.

I agree, but most of the time, I don't modify arrays once they've been 
created. If I do modify them a lot, I usually want a set rather than an 
array for efficient removals and uniqueness.


More information about the Digitalmars-d-learn mailing list