[Haskell-cafe] newbie - how to call a Haskell interpreter from C

Stefan O'Rear stefanor at cox.net
Sat Aug 25 12:55:01 EDT 2007


On Sat, Aug 25, 2007 at 12:34:45PM -0400, Brock Peabody wrote:
> On 8/25/07, Henk-Jan van Tuyl <hjgtuyl at chello.nl> wrote:
> >
> >
> > The easiest way to run Haskell software from a C program is to give the
> > shell command:
> >    runhaskell Foo.hs
> 
> 
> I'm a newbie but not that new :) I really have to be able to interpret the
> Haskell from within the same process.
> 
> > A more advanced way is, to link Haskell libraries by means of the foreign
> > function interface (FFI) [1].
> > There are several tools to support FFI development [2]. I am sure my list
> > of URL's is not complete.
> >
> > [1] http://www.cse.unsw.edu.au/~chak/haskell/ffi/
> > <http://www.cse.unsw.edu.au/%7Echak/haskell/ffi/>
> >      http://www.haskell.org/haskellwiki/FFI_Introduction
> >      http://www.haskell.org/haskellwiki/FFI_cook_book
> >
> > [2] http://www.haskell.org/haskellwiki/FFI_imports_packaging_utility
> >      http://www.haskell.org/haskellwiki/HSFFIG
> 
> 
> My understanding is that FFI helps you to call into other languages from
> Haskell and vice-versa. I will definitely need this, but what I can't figure
> out how to do is to invoke the ghci or hugs interpreter programmatically,
> in-process. I didn't see a way to do that in the links you listed, am I
> missing something?

No, you're not missing anything, and there are no deliberately
embeddable Haskell interpreters.  Your options are:

1a. GHC, native code:

Link libHSplugins.a into your program (compile Don's hs-plugins
library).  Then call the external functions described in
http://www.cse.unsw.edu.au/~dons/hs-plugins/hs-plugins-Z-H-4.html#node_sec_7.2,

Pro: Full GHC runtime speed

Con: Full GHC compile-time sloth
     As big as GHC (20mbytes file size)
     Leaks memory

1b. GHC, bytecode:

Write a binding to the GHC-API runStmt function.  foreign export it.

Pro: As fast as GHCi
     No leaks

Con: Still huge
     Slow runtime

2. Hugs

Link Hugs.  Study the source code to runhugs.

Pro: Much faster loading
     Much smaller footprint

Con: Less polished
     Slow runtime

Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20070825/bec32ab5/attachment.bin


More information about the Haskell-Cafe mailing list