`StablePtr` in `ST`

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

`StablePtr` in `ST`

M Farkas-Dyck
I have been doing some work where i want `StablePtr`, but also to not
be confined to `IO`. I saw the following comment in
"compiler/prelude/PrimOp.hs":

Question: Why @RealWorld@ - won't any instance of @_ST@ do the job? [ADR]

It has been there for 20 years. What is the answer? If it is safe i'll
send the patch generalizing these operations.
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: `StablePtr` in `ST`

David Feuer
So something like

newtype StablePtr a = StablePtr (StablePtrST RealWorld a)?

I suppose that could work with some discipline. You have to assume that foreign code doesn't pick its address out of a hat and so something silly, but I guess you pretty much have to assume that anyway.

On Wed, Aug 21, 2019, 5:00 AM Matthew Farkas-Dyck <[hidden email]> wrote:
I have been doing some work where i want `StablePtr`, but also to not
be confined to `IO`. I saw the following comment in
"compiler/prelude/PrimOp.hs":

Question: Why @RealWorld@ - won't any instance of @_ST@ do the job? [ADR]

It has been there for 20 years. What is the answer? If it is safe i'll
send the patch generalizing these operations.
_______________________________________________
Glasgow-haskell-users mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: `StablePtr` in `ST`

M Farkas-Dyck
My colleague responded but said it was rejected from ghc-devs. Message follows:

On 21/08/2019, Jon Purdy <[hidden email]> wrote:

> Our use case is unsafeCoercing a mutable reference to use as a key in an
> IntMap. Our reasoning is that coercing an IORef/STRef is unsuitable because
> the underlying MutVar# may move, invalidating the key (i.e., you cannot
> safely coerce back if a GC has happened between insertion and reading). (If
> that’s incorrect, do enlighten us!) This is a “very nice to have” for our
> purposes—with the understanding that it’s wicked unsafe. ;)
>
> On Tue, Aug 20, 2019, 18:09 David Feuer <[hidden email]> wrote:
>
>> You also need to avoid inspecting the StablePtr itself, which is just a
>> number, to maintain purity. The whole thing is a bit weird. Why do you
>> want
>> this anyway?
>>
>> On Wed, Aug 21, 2019, 7:39 AM David Feuer <[hidden email]> wrote:
>>
>>> So something like
>>>
>>> newtype StablePtr a = StablePtr (StablePtrST RealWorld a)?
>>>
>>> I suppose that could work with some discipline. You have to assume that
>>> foreign code doesn't pick its address out of a hat and so something
>>> silly,
>>> but I guess you pretty much have to assume that anyway.
>>>
>>> On Wed, Aug 21, 2019, 5:00 AM Matthew Farkas-Dyck <[hidden email]>
>>> wrote:
>>>
>>>> I have been doing some work where i want `StablePtr`, but also to not
>>>> be confined to `IO`. I saw the following comment in
>>>> "compiler/prelude/PrimOp.hs":
>>>>
>>>> Question: Why @RealWorld@ - won't any instance of @_ST@ do the job?
>>>> [ADR]
>>>>
>>>> It has been there for 20 years. What is the answer? If it is safe i'll
>>>> send the patch generalizing these operations.
>>>> _______________________________________________
>>>> Glasgow-haskell-users mailing list
>>>> [hidden email]
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>>>>
>>> _______________________________________________
>> Glasgow-haskell-users mailing list
>> [hidden email]
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>>
>
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs