[Haskell-cafe] How can I pass IOUArrays to FFI functions?

Ryan Ingram ryani.spam at gmail.com
Tue Aug 21 03:50:22 EDT 2007


Ah, sneaky.  That code is fine because it uses unsafeCoerce# on "memcpy",
changing memcpy from whatever type it is, into
MutableByteArray# s# -> MutableByteArray# s# -> Int# -> s# -> (# s#, () #)

So as long as the GC understands MutableByteArray# it's safe; it's relying
on the C calling convention being handled properly.

On 8/21/07, Bulat Ziganshin <bulat.ziganshin at gmail.com> wrote:
>
> Hello Stefan,
>
> Tuesday, August 21, 2007, 10:08:59 AM, you wrote:
>
> > Your code is broken in a most evil and insidious way.
>
> and this code, too? :)
>
> freezeSTUArray :: Ix i => STUArray s i e -> ST s (UArray i e)
> freezeSTUArray (STUArray l u marr#) = ST $ \s1# ->
>    case sizeofMutableByteArray# marr#  of { n# ->
>    case newByteArray# n# s1#           of { (# s2#, marr'# #) ->
>    case unsafeCoerce# memcpy marr'# marr# n# s2# of { (# s3#, () #) ->
>    case unsafeFreezeByteArray# marr'# s3# of { (# s4#, arr# #) ->
>    (# s4#, UArray l u arr# #) }}}}
>
> > Unreproducable bugs are rarely reported, but they do add to people's
> > impression of how unstable a language/library is.
>
>
>
>
> --
> Best regards,
> Bulat                            mailto:Bulat.Ziganshin at gmail.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070821/1e08898d/attachment.htm


More information about the Haskell-Cafe mailing list