[[project @ 2001-08-10 01:47:39 by chak] chak**20010810014740 Added SimonM's explanation about f.e.d. stubs. ] { addfile ./ghc/docs/comm/the-beast/alien.html hunk ./ghc/docs/comm/index.html 9 -
+ GHC implements experimental (by now it is actually quite well tested) + support for access to foreign functions and generally the interaction + between Haskell code and code written in other languages. Code + generation in this context can get quite tricky. This section attempts + to cast some light on this aspect of the compiler. + +
+ For each Haskell module that contains a foreign export
+ dynamic
declaration, GHC generates a _stub.c
file
+ that needs to be linked with any program that imports the Haskell
+ module. When asked about it Simon Marlow justified the
+ existence of these files as follows:
+
+ The stub files contain the helper function which invokes the Haskell + code when called from C. +++ Each time the foreign export dynamic is invoked to create a new + callback function, a small piece of code has to be dynamically + generated. It is the address of this dynamically generated bit of + code that is returned as the
Addr
(orPtr
). + When called from C, the dynamically generated code must somehow invoke + the Haskell function which was originally passed to the + f.e.d. function -- it does this by invoking the helper function, + passing it aStablePtr
+ to the Haskell function. It's split this way for two reasons: the + same helper function can be used each time the f.e.d. function is + called, and to keep the amount of dynamically generated code to a + minimum. +
+ The stub code is generated by DSForeign
.fexportEntry
.
+
+
+
+ +Last modified: Fri Aug 10 11:47:41 EST 2001 + + + + }