FFI proposal: allow some control over the scope of C headerfiles
simonmar at microsoft.com
Tue Apr 25 04:40:58 EDT 2006
On 24 April 2006 23:21, John Meacham wrote:
> It is my understanding that the FFI foreign imports declare an ABI and
> not an API, meaning the exact way to make the foreign call should be
> completely deterministic based on just what is in the haskell file
> proper. Otherwise, obviously, direct to assembly implementations would
> be impossible.
> In this sense, include files are always potentially optional, however,
> due to the oddness of the C langauge, one cannot express certain calls
> without proper prototypes, current haskell implementations take the
> straightforward path of relying on the prototypes that are contained
> in the system headers, which also incidentally provides some safety
> net against improperly specified FFI calls. However, it would also be
> reasonable for an implementation to just generate its own prototypes,
> or use inline assembly or any other mechanism to implement the FFI ABI
> calls properly.
This comes up quite often. The reason that GHC doesn't generate its own
prototypes is that we would have to be *sure* that there aren't any
other prototypes in scope for the same function, because those
prototypes might clash. We can't generate a correct prototype that is
guaranteed not to clash, because the foreign import declaration doesn't
contain enough information (no const annotations).
Admittedly I haven't tried this route (not including *any* external
headers at all when compiling .hc files). It might be possible, but you
lose the safety net of compiler-checked calls.
More information about the Haskell-prime