[HOpenGL] Re: FFI Addendum, CVS Id 1.19
Manuel M. T. Chakravarty
chak at cse.unsw.edu.au
Thu Jan 10 04:37:03 EST 2002
Sven Panne <Sven.Panne at informatik.uni-muenchen.de> wrote,
> The addendum looks fine for me, well done Manuel! But as usual, I've got a few
> minor points:
>
> * Section 3.4 (export declarations) says:
>
> "If an evaluation triggered by an external invocation of an exported
> Haskell value returns with an exception, the system behaviour is
> undefined."
>
> So far, so good... It continues:
>
> "Thus, Haskell exceptions have to be caught within Haskell and
> explicitly marshalled to the foreign code."
>
> I understand the idea here, but what about System.exitWith and
> System.exitFailure in callbacks? GHC implements this via throwing an
> exception, but this is an implementation detail IMHO. The consequence
> of this implementation choice is a fatal error (uncaught exception)
> when exit{With,Failure} is evaluated in callbacks. So there are two
> questions:
>
> * Should we allow exit{With,Failure} in such circumstances?
> (My opinion: yes)
>
> * If the answer is no, what is the "official" way to terminate
> cleanly from callbacks? Note that in the context of HOpenGL
> the callback can't return a value due to the nature of an
> external lib (GLUT). I fear that the answer could be hs_exit(),
> but that would lead to a backwards compatibility hell...
I really think that this is GHC's problem. What the FFI
report says is that the *user* cannot expect to get an
exception properly marshalled across a callback. If GHC
uses exceptions internally to implement features, which H98
doesn't define to be based on exceptions, then it is GHC's
responsibility to handle these "special" exceptions in a
special way. Overall, I guess, GHC needs to check - at
least - for exit{With,Failure} failures at callback
boundaries and handle them appropriately.
> * The example in section 5.4.2 should use "wrapper" instead of the old f.e.d.
Oops.
Cheers,
Manuel
More information about the FFI
mailing list