new DIP39: Safe rvalue references: backwards compatible, safe against ref/nonref code evolution, compatible with UFCS and DIP38

deadalnix deadalnix at gmail.com
Sat May 11 01:34:01 PDT 2013


On Saturday, 11 May 2013 at 02:24:02 UTC, Timothee Cour wrote:
> Abstract
>
> We propose to introduce rvalue references that are:
> * safe: guarantees memory safety so that references will always 
> point
> to valid memory.
> * backwards compatible: current valid D code will continue to 
> work
> without change. In addition, additional code becomes valid with 
> call
> site rvalue ref annotation.
> * safe against ref/nonref code evolution: call site rvalue ref
> compulsory annotation turns ref/nonref changes into compile 
> errors
> instead of silently changing code behavior.
> * both const ref or ref can be used with rvalue refs (more 
> flexible than C++)
> * no call site ref annotation when input ref argument is 
> already an
> lvalue (different from C#), for backwards compatibility (and 
> making it
> less verbose)
> * compatible with UFCS
> * compatible with DIP38: can use same inref/outref internal 
> compiler
> annotation for input references that can be returned by ref by a
> function. But DIP38 is optional.
>
> link: http://wiki.dlang.org/DIP39

OK, First remark on the way the DIP is presented. You start right 
away with example which make it hard to understand o general big 
picture.

Second, ^ is not unused in D and the DIP introduce an ambiguity 
here.

Making the temporary creation explicit is an idea that hasn't 
been explored that much. I have to think more about it.


More information about the Digitalmars-d mailing list