proposal for general dup function

Dan dbdavidson at yahoo.com
Mon Dec 10 04:56:29 PST 2012


On Sunday, 9 December 2012 at 16:26:12 UTC, Jacob Carlborg wrote:
> On 2012-12-09 15:45, Dan wrote:
>> Phobos can and should have a general dup function, capable of 
>> duping
>> (i.e. recursive deep copy) structs without requiring any 
>> effort from
>> struct developers.
>
> [snip]
>
> I think much of this functionality could be shared with 
> serialization. A few questions and comments.
>

I am talking about a much smaller scope (just a few of functions 
- 200 lines of code tops) - but there are similarities.

> * Are array slices properly handled

Both array slices and associative arrays are properly handled. 
Let me know if you find otherwise.

> * I think there need to be a way to explicitly say that a given 
> field and a whole struct shouldn't be duped

I definitely see need for that in serialization. Not sure about a 
generalized dup function, though. I have a similar function for 
deeply comparing instances and I think this should always hold:

assert(typesDeepEqual(t, t.gdup))

If you skipped fields it would not.

> * All the public strings used for mixins should be templates
>

The mixins in the code are for higher-up functionality, some of 
it on top of the dup. There is no need for mixin for a general 
dup. The mixin(PostBlit) is there if you want to provide a dup 
for your struct so assignments in generic code gets the deep copy 
semantics with opAssign and copy construction. However, if 
template mixins are preferred to string mixins I suppose that is 
a good idea for that code and I'll check it out.

I have refactored the dup into its own module, so there is no 
need for mixin:
https://github.com/patefacio/d-help/blob/master/d-help/opmix/dup.d

> Orange serialization library, supports classes as well:
>
> https://github.com/jacob-carlborg/orange


More information about the Digitalmars-d mailing list