FFI
John Meacham
john@repetae.net
Sun, 13 Jan 2002 22:20:42 -0800
don't forget one very big pro for hsc2hs, which is that it comes with
ghc so you can count on it working. I find it tricky to keep c2hs (and
hence gtk+hs) working with the latest ghc. no doubt the situation is
getting better, but it is still somewhat of a hassle. I tend to use
hsc2hs for 'small' bindings of a few functions, or when i am writing
both the c and haskell code, and c2hs to try and wrap premade c
libraries.
John
On Mon, Jan 14, 2002 at 04:45:12PM +1100, Manuel M. T. Chakravarty wrote:
> Dylan Thurston <dpt@petunia.bostoncoop.net> wrote,
>
> > On Sat, Jan 12, 2002 at 01:24:54PM +1100, Manuel M. T. Chakravarty wrote:
> > > I think, there are five options:
> > >
> > > * H/Direct (you mentioned that already)
> > > * GreenCard (ditto)
> > > * C->Haskell
> > > http://www.cse.unsw.edu.au/~chak/haskell/c2hs/
> > > * hsc2hs (comes with GHC)
> > > * Plain FFI
> >
> > And what are the pros and cons of each? Presumably you recommend
> > C->Haskell, since you wrote it; what makes it better?
>
> Since your are asking, here my shamelessly biased opinion ;-)
>
> I don't think that it makes much sense coding on the plain
> FFI unless there are reasons for avoiding an extra tool or
> the binding is very small. Moreover, GreenCard (with all
> due respect) is a bit of a legacy. The other three tools
> clearly benefited from the GreenCard experience, but after
> all they were developed, because the authors thought that
> they can improve on GreenCard. This leaves us with
> H/Direct, C->Haskell, and hsc2hs.
>
> I chose the order of listing these three tools on purpose.
> It is not only the historical order, but enumerates them in
> order of decreasing complexity. H/Direct is clearly the
> most powerful of the three. It is an IDL compiler with the
> ability to process a combination of C header files and
> matching annotation files as a form of poor man's IDL,
> whereas C->Haskell and hsc2hs only have one goal: Simplify
> the development of Haskell bindings to C libraries.
>
> I believe in the design philosophy of having a set of small
> tools that do just one job, but do it well. So, I prefer
> a specialised tool like C->Haskell and besides, when I
> initially developed C->Haskell, H/Direct couldn't handle C
> headers yet. As for a feature comparison, this is what
> comes to my mind:
>
> H/Direct pros:
> - It can automatically marshal structures. In C->Haskell,
> you have to do some of this manually. Automating the
> process is on the todo list.
>
> C->Haskell pros:
> - Given a header file, you write on file which contains the
> Haskell API and binding hooks that link the Haskell
> entities to C entities. With H/Direct, you need the
> annotation file plus usually a Haskell module that
> redresses the automatically generated interface to what
> you want to present to the user.
> - Marshalling is expressed using a marshalling library in
> plain Haskell, which means it is easy to write special
> code to handle weird cases.
>
> Regarding hsc2hs, it's idea was to be even simpler than
> C->Haskell. In particular, it is independent of the used C
> compiler, whereas C->Haskell has to imitate part of what a C
> compiler does. However, this comes at the expense of IMHO
> rather messy quoting requirements. Moreover, there is the
> potential in C->Haskell to provide quite a bit more
> automation than it implements at the moment.
>
> Cheers,
> Manuel
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
--
---------------------------------------------------------------------------
John Meacham - California Institute of Technology, Alum. - john@repetae.net
---------------------------------------------------------------------------