[Proposal] Weak reference implementation for D

Denis Shelomovskij verylonglogin.reg at gmail.com
Sun Oct 13 23:22:15 PDT 2013


13.10.2013 21:36, Robert пишет:
>
>>         * Robert's one from his new `std.signals` implementation proposal:
>>
>> https://github.com/phobos-x/phobosx/blob/d0cc6b45511465ef1d493b0d7226ccb990ae84e8/source/phobosx/signal.d
>>
>
> Obviously I don't see it, otherwise I would have fixed it. Maybe you
> could elaborate a bit on your claim? Your implementation uses an
> entirely different technique for hiding the reference so a direct
> comparison is quite hard.

1. Have you read `gc.gc.fullcollect`, I mean a general function 
structure, not every line? If not, read it or you have no idea how 
collection performs.

2. I'm surprised you do think your implementation is correct as calling 
code twice (`foreach(i; 0..2)`) is an obvious hack to decrease a variety 
of undesired threads execution order (as it have to execute in this 
order twice).

----- Explanation -----

1. Race condition
   In every moment GC thread can be paused in state it already marked 
all dead blocks and ready to collect. So before `GC.addrOf` (which will 
have to wait for the end of the collection as it uses same mutex) call 
it can collect your object (the object can be on stack or whatever, 
doesn't matter). Also an new object can be created occupying the same 
memory and `GC.addrOf` will return non-null.

2. Incorrect assumption
   `o = GC.addrOf(tmp.address)` is just incorrect as you assume the 
object is placed at the base address of its memory block which is not 
guaranteed. Yes, it may be true for now (I haven't read GC sources 
enough to be definite here) in general case but what about some e.g. 
tricky user defined class instance sequences which user may create? Yes, 
never heard about it and just invented it, but it doesn't make this or 
similar case impossible. Also it's rather bad to do any needless 
assumption about internal stuff.

----- P.S. -----

I have to say you have a big problem especially for a programmer: you 
think you are competent in area you aren't and it can play a trick on 
you later. Please don't be angry with me, we all like to think so but we 
all have to look at ourselves as critically as possible to prevent 
problems in future.

-- 
Денис В. Шеломовский
Denis V. Shelomovskij


More information about the Digitalmars-d mailing list