I can see it's GHC-specific, what I was asking is does the computer
than runs the final program need to have GHC installed. Presumably is
does if it's going to compile files on the fly. What about if it only
loads *.o files that are already compiled? Is GHC still required?
(Not that the answer worries me greatly; I'm just curiose.)
You would need the object files and archives comprising the Haskell
runtime, and you'd need to run a ghc link in verbose mode to figure
out how to use them and write a script to do the link.
Uh... right. So basically you need GHC. ;-)
Wait a sec... Are you trying to tell me that it is *faster* to take
the source, type check it, convert it to Core, perform 25,000
Core-to-Core transformations, convert Core to C, call GCC, link the
result together, dynamically load it, execute it, extract the result
and confirm that it type checks, and display it....... then it is to
just directly execute an interpreted expression? I find that highly
surprising.
It's pretty fast, actually. But your interactive expression still
needs to do most of that, except it compiles cmm to bytecode instead
of to C (old default; handed off to gcc afterward) or directly to asm
(modern ghc). In particular, you are doing both core transformations
and type checking no matter what --- and they take *far* more time
than the compile and link. Truly.
Interesting. On my system, the link stage typically takes far longer
than compilation. (Compilation takes 4 - 5 seconds per module, linking
takes another 15 seconds or so. Depending on how big the program is. Use
-O2 to make the compilation stage take round about 30 seconds per module
instead.)
Plus, consider that people often throw extensions at lambdabot --- do
you support even simple stuff like forall in your interpreter? Using
ghc means you can use most of the ghc extensions.
Ah, yes, well, I avoid everything that isn't in Haskell 98. ;-)
(Mainly because 1. most of it makes no semblence of sense, and 2. why do
we need any of this stuff anyway?)
FWIW (again, I don't have the code any more) my interpreter had no type
checker, but would gracefully handle runtime errors. (Typically if the
code isn't well-typed, that means it hits some constructor the function
isn't expecting, and dies that way.) Very useful and instructive for
seeing how stuff works; I discovered first-hand why foldl' exists!
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe