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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe