An Issue I Wish To Raise Awareness On

Atila Neves via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 21 01:51:27 PDT 2017


On Thursday, 20 July 2017 at 10:15:26 UTC, Kagamin wrote:
> On Wednesday, 19 July 2017 at 20:59:03 UTC, Atila Neves wrote:
>> Not necessarily - the reference counted smart pointer doesn't 
>> have to be `shared` itself to have a `shared` payload.
>
> Yes, but it can be done either way. It's actually what Jack is 
> trying to do: make stdout shared and reference counted: 
> https://issues.dlang.org/show_bug.cgi?id=15768#c7
>
>> I'm not even entirely sure what the advantage of it being 
>> `shared` would be, or even what that would really mean.
>
> It will be thread safe and its lifetime will be automatically 
> managed.
>
>> You've definitely made me wonder about complicated cases, but 
>> I'd argue that they'd be rare. Destructors are (bar manually 
>> calling them) run in one thread. I'm having trouble imagining 
>> a situation where two threads have references to a `shared` 
>> object/value that is going to be destroyed deterministically.
>
> A mutex, a file, a socket, any shareable resource. Though I 
> agree that reference counting of shared resources should be 
> optimized by thread local counters.

Mutexes and sockets are classes, so not destroyed 
deterministically.

Anything that is `shared` is likely to be a reference (pointer, 
class...), or a global. Either way the compiler-generated 
destructor call isn't going to exist, which means it's probably 
ok to cast away shared when the compiler inserts the automatic 
call to a destructor at the end of scope.

Atila




More information about the Digitalmars-d mailing list