confused with some_var.dup

Christopher Wright dhasenan at gmail.com
Fri Jan 16 15:59:28 PST 2009


Qian Xu wrote:
> Denis Koroskin wrote:
>> The "Hello, World!" string is not allowed to be modified, because it could
>> be shared throughot the project and will be most probably put in a
>> read-only memory causing segfault at modification.
>>
>> But it you need to have a modified version of this this, you create its
>> copy (duplication, or 'dup' for short) and make whatever changes you want
>> to it...
> 
> This confuses me very. 
> Do you mean, there is no Copy-On-Write semantic in D?
> IMO, D-Compiler should make decision about whether to allocate a new memory
> block, not programmer.

You can create a COW array struct pretty easily. However, this will be 
pretty slow in a lot of cases.

If you have an array, you're probably going to build it, hold onto it 
for a while, and then discard it. You might mutate it in the middle, but 
you're probably likely to do a lot of mutations if you do any.

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.

COW is safer, but it can waste resources like nobody's business and only 
helps in a few cases. It's better to leave that for a library type.


More information about the Digitalmars-d-learn mailing list