FFI question -- was: [Haskell-cafe] New slogan for haskell.org

Don Stewart dons at galois.com
Wed Dec 19 22:07:31 EST 2007


stevelihn:
> On Dec 11, 2007 11:16 PM, Don Stewart <dons at galois.com> wrote:
> > >    2. It offers strong support for integration with other languages and tools
> > >    (FFI? Is the support strong?)
> >
> >    2. The FFI in Haskell is perhaps the most powerful out there.
> >       You can import C or export Haskell to C with a single line FFI decl.
> >
> Don,
> I am a newbie on FFI, but have been interested in looking into it. If
> I google on "haskell FFI", what I find is typically:
> 1. The official Haskell 98 FFI 1.0
> 2. The FFI preprocessor -- greencard on haskell.org, where several
> other preprocessors are listed (in the Link section): HaskellDirect, C
> to Haskell, hsc2hs (included in GHC distributions), QForeign, KDirect.

Right. Most of those are out of date.

> The FFI 1.0 API is certainly the most robust tool. However, the
> existence of preprocessors seem to suggest (at least very enticing)
> that the use of a preprocessor would make life easier.

Yes, that's the foundation.

> But when I dig deeper, several of them have not had any release in
> (more than) 3 years. The only exception seem to be "C to Haskell",
> which is part of gtk2hs, and hsc2hs, being part of GHC. It immediately
> becomes confusing which tool I should use if I were to work on a FFI
> project... Can you shed some light on this?

There are three approaches, depending on the size of your project.

    Write your ow FFI decls manually.

        - Good when you have a small job
        - and the C types are simple
        - example:
            strlen

    Use hsc2hs:
    
        - good for more complex C code. Scales nicely. But a bit tedious.
        - examples: 
            pcre.h
            X11.h

    Use c2hs:

        - more automated than hsc2hs
        - less common
        - scriptable
        - examples:
            gtk2hs

I use hsc2hs mostly.

-- Don



More information about the Haskell-Cafe mailing list