ref returns and properties

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Jan 25 13:59:32 PST 2009


Jarrett Billingsley wrote:
> On Sun, Jan 25, 2009 at 3:00 PM, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>> But these are too many. These should suffice:
>>
>> class Host
>> {
>>     property prop
>>     {
>>         T get();
>>         void acquire(ref T value) { ... }
>>         void release(ref T value) { ... }
>>     }
>> }
>>
>> set() can be implemented as acquire from a copy, and swap can be implemented
>> by calls to acquire and release. Technically, get() could be also
>> implemented with acquire and release, but that's too intensive for most
>> types.
>>
>> The problem I'm seeing is that most people won't want to go through the
>> trouble of implementing three functions for one property.
> 
> I absolutely wouldn't.  Once we start doing stuff like that, we start
> getting into tedious C++ territory.  Holding the compiler's hand,
> writing mountains of tedious, easy-to-mess-up boilerplate code, just
> to be able to implement simple things so they fit in with the
> language's weird semantics.  At that point I'd _rather_ use the
> current "properties."

But you lose correctness and efficiency. I agree that in certain cases 
they aren't paramount, but you can't build a language to not allow them.

A possible solution would be to require only get, make acquire necessary 
only for writable properties, and make release entirely optional.


Andrei



More information about the Digitalmars-d mailing list