Something needs to happen with shared, and soon.

Benjamin Thaut code at benjamin-thaut.de
Wed Nov 14 03:14:01 PST 2012


Am 14.11.2012 12:00, schrieb Walter Bright:
> On 11/14/2012 2:49 AM, Benjamin Thaut wrote:
>> Am 14.11.2012 11:42, schrieb Walter Bright:
>>> On 11/14/2012 1:23 AM, Benjamin Thaut wrote:
>>>> Could you please give an example where it would break?
>>>
>>> Thread 1:
>>>    1. create shared object
>>>    2. pass reference to that object to Thread 2
>>>    3. destroy object
>>>
>>> Thread 2:
>>>    1. manipulate that object
>>>
>>
>> But for passing a reference to a value type you would have to use a
>> pointer,
>> correct? And pointers are a unsafe feature anyway...
>> I don't see your point.
>
> Pointers are safe. It's pointer arithmetic that is not (and escaping
> pointers).
>
>
>> And if the use of pointers is allowed, I can make the same case break
>> in a
>> single threaded environment without shared.
>
> 1. You can't escape pointers in safe code (well, it's a bug if you do).
>
> 2. If the struct is on the heap, it is only destructed if there are no
> references to it in any thread. If it is not on the heap, and you are in
> safe code, it should always be destructed safely when it goes out of scope.
>
> This is not so for shared pointers.

So just to be clear, escaping pointers in a single threaded context is a 
bug. But if you escape them in a multithreaded context its ok?
That sounds inconsistent to me.

But if that is by design your argument is valid.

I still can not think of any real world usecase though where this could 
actually be used.

A small code example which would break as soon as we allow destructing 
of shared value types would really be nice. (maybe even in the langauge 
documentation, because I coudln't find anything)

Kind Regards
Benjamin Thaut



More information about the Digitalmars-d mailing list