[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