Sven Panne [EMAIL PROTECTED] 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
___
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi