DConf 2013 Day 1 Talk 2 (Copy and Move Semantics)

Simen Kjaeraas simen.kjaras at gmail.com
Sat May 11 15:44:03 PDT 2013


On 2013-05-12, 00:31, Manu wrote:

> This is a very interesting idea.
> It would also be a massive advantage when passing ownership between
> threads, which is a long-standing problem that's not solves at all.
> There currently exists no good way to say "I now give ownership to you",
> which is what you basically always do when putting a job on a queue to be
> picked up by some foreign thread.
> Using shared is cumbersome, and feels very inelegant, casts everywhere,  
> and
> once the casts appear, any safety is immediately lost.
>
> Can you detail the process involved in assignment from one unique to
> another unique? Would the original unique be destroyed? Leaving only the
> 'copy' remaining?

Not speaking for Diggory, but that's generally the idea, yes. In code:

class A { /* ... */ }

void foo(A a) { /* ... */ }

void fun( ) {
     unique A a = new A();
     unique A b = a;
     assert(a is null);
     foo(b);
     assert(b is null);
}

And with my suggestion for 'lent':

void bar(lent A a) { /* Assigning a (or anything reachable from a) to a  
global in here is verboten. */ }

void gun( ) {
     unique A a = new A();
     bar(a);
     assert(a !is null);
}

-- 
Simen


More information about the Digitalmars-d mailing list