Smart references
via Digitalmars-d
digitalmars-d at puremagic.com
Sat Mar 14 08:55:49 PDT 2015
On Friday, 13 March 2015 at 15:21:42 UTC, Zach the Mystic wrote:
> On Wednesday, 11 March 2015 at 20:33:07 UTC, Andrei
> Alexandrescu wrote:
>> I'm investigating D's ability to define and use smart
>> references. Per the skeleton at
>> http://dpaste.dzfl.pl/9d752b1e9b4e, lines:
>>
>> #6: You can't default-initialize a ref.
>>
>> #7: You can't copy a ref - copying should mean copying the
>> object itself.
>>
>> #9: Per this example I'm hooking a reference with an Owner.
>> The reference hooks calls to opAddRef and opRelease in the
>> owner.
>>
>> #23: Assigning the reference really assigns the referred.
>>
>> #28: A reference is a subtype of ref T. Most operations
>> against the reference will be automatically forwarded to the
>> underlying object, by reference ("ref" is important here).
>>
>> As unittests show, things work quite nicely. There are a few
>> things that don't:
>>
>> #70: Attempting to copy a reference fails on account of the
>> disabled postblit. There should be a way to tell the compiler
>> to automatically invoke alias this and create a copy of that
>> guy.
>>
>> #81: Moving from a reference works by moving the Ref object.
>> There should be a way to tell the compiler that moving should
>> really move the payload around.
>>
>> There are a couple other issues not represented in the
>> unittest, for example related to template deduction. In a
>> perfect world, Ref would masquerade (aside from having a
>> different layout, ctor, and dtor) as an lvalue of type T.
>>
>> But in fact I think solving the matters above would go a long
>> way toward making smart references nicely usable. Although my
>> example is centered on reference counting an owner, there are
>> other uses of smart references. Are all these worth changing
>> the language?
>
> Are the suggested changes also related to the possibility of
> making `ref` a type?
Are there plans to do this? I remember Walter suggested `ref` for
non-parameters, i.e. local variables, but as a storage class, not
a type modifier.
More information about the Digitalmars-d
mailing list