[Haskell-cafe] Re: Export Haskell Libraries

Simon Marlow simonmarhaskell at gmail.com
Tue Apr 17 08:19:51 EDT 2007


Dan Weston wrote:
> In the GHC docs:
> http://www.haskell.org/ghc/docs/6.4.1/html/users_guide/sec-ffi-ghc.html#using-own-main 
> 
> 
> "There can be multiple calls to hs_init(), but each one should be 
> matched by one (and only one) call to hs_exit()[8]."
> 
> What exactly happens with nested calls? Is there only one runtime 
> created, with a simple counter to know which hs_exit should shut it 
> down?

Yes.  But the runtime doesn't currently support restarting (hs_exit() followed 
by hs_init()).

> If so, is there a way of having multiple interpreters open safely 
> at the same time?

I'm not sure exactly what you mean by "multiple interpreters".  The runtime is 
only designed to support a single instance of itself (it uses global static 
storage everywhere).

> Or does each hs_init() create a new separate concurrent runtime (the 
> preferable alternative)?

Nope, see above.  To do that you'd need a "runtime handle" returned by hs_init() 
and passed to every foreign exported function, somehow.

> And what is the cost of creating and destructing the GHC runtime anyway?

Not much.

> Can the Haskell interpreter be in a Linux shared-object library, so long 
> as I make sure to call hs_init() after loading and hs_exit() before 
> unloading it? My experiments so far show this working flawlessly, but I 
> vaguely remember an e-mail thread saying GHC couldn't be linked in 
> dynamically.

Perhaps, although the shared library won't really be shared - it'll be linked in 
place each time you use it, because we don't currently have support for PIC 
everywhere (well, we have partial support and there's a SoC project to finish it 
off).

Cheers,
	Simon.


More information about the Haskell-Cafe mailing list