[Haskell-cafe] Can reallyUnsafePtrEquality give false positives?

Carter Schonwald carter.schonwald at gmail.com
Wed Nov 22 19:24:39 UTC 2017


yeah, and if you look at how its generated, its pretty safe  with some care
(though still unsafe)
https://github.com/ghc/ghc/blob/314bc31489f1f4cd69e913c3b1e33236b2bdf553/compiler/prelude/primops.txt.pp#L2644

and
https://github.com/ghc/ghc/blob/ec080ea1f160263282500b30444cb2db857f2f93/compiler/codeGen/StgCmmPrim.hs#L358

are the two places in question :)

On Wed, Nov 22, 2017 at 2:15 PM, Brandon Allbery <allbery.b at gmail.com>
wrote:

> Actually, I'd say that it can, but only if used incorrectly. Which is why
> it's reallyUnsafe.
>
> The OP is correct in that a gc at the wrong time can lead to spurious
> positives. The key to this is that, if you force everything to be evaluated
> to WHNF (so you actually have the pointers) and then gc, you have some
> determinacy as to when the next gc will happen: force to WHNF first, gc,
> make sure any subsequent operations between that and your
> reallyUnsafePtrEquality either don't allocate or fit in the nursery --- and
> in this case, you can trust the result. So it requires a fair amount of
> care, but there is a window in which it is safe.
>
> On Wed, Nov 22, 2017 at 2:06 PM, Andrew Martin <andrew.thaddeus at gmail.com>
> wrote:
>
>> It cannot give false positives. If it could, that would make it totally
>> worthless.
>>
>> Sent from my iPhone
>>
>> > On Nov 22, 2017, at 12:22 PM, Michael Walker <mike at barrucadu.co.uk>
>> wrote:
>> >
>> > Hello,
>> >
>> > Can reallyUnsafePtrEquality give false positives?  I can see how it
>> > can give false negatives (eg, compiler optimisations increasing or
>> > decreasing sharing), but I'm not so sure if it can give false
>> > positives.
>> >
>> > I don't see how in a garbage collected language two live values could
>> > compare reference equal.  Unless the implementation is something like:
>> >
>> > reallyUnsafePtrEquality a b = getptr a == getptr b
>> >
>> > ...as that then means that if the GC moves things after `getptr a` is
>> > evaluated but before `getptr b` is, then you could get a false
>> > positive.  But that doesn't seem like a sensible implementation to me,
>> > because then reallyUnsafePtrEquality would surely be totally useless.
>> >
>> > --
>> > Michael Walker (http://www.barrucadu.co.uk)
>> > _______________________________________________
>> > Haskell-Cafe mailing list
>> > To (un)subscribe, modify options or view archives go to:
>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> > Only members subscribed via the mailman list are allowed to post.
>> _______________________________________________
>> Haskell-Cafe mailing list
>> To (un)subscribe, modify options or view archives go to:
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> Only members subscribed via the mailman list are allowed to post.
>>
>
>
>
> --
> brandon s allbery kf8nh                               sine nomine
> associates
> allbery.b at gmail.com
> ballbery at sinenomine.net
> unix, openafs, kerberos, infrastructure, xmonad
> http://sinenomine.net
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20171122/c53337ed/attachment.html>


More information about the Haskell-Cafe mailing list