Hacking on GHC interactively with GHCi

Clemens Fruhwirth clemens at endorphin.org
Tue Oct 17 09:54:26 EDT 2006


At Tue, 17 Oct 2006 10:26:15 +0100,
Simon Marlow <simonmarhaskell at gmail.com> wrote:
> 
> Clemens Fruhwirth wrote:
>
> > * load all .o files (with unboxed types) and load a modified source in
> > interpreted mode. This doesn't work well because for that approach you
> > need to mix the source with the object in the same directory (copy
> > compiler/**/*.[l]hs to stage1 or stage2). This, fails because
> > there seem to be some sources missing, I have not investiged where the
> > .o-boot files come from like compiler/stage2/basicTypes/OccName.o-boot.
> > With source files, GHCi just ignores the existing .o file (resumable
> > because it can't check whether the .o file is more recent than the
> > source file)
> 
> This is something we haven't tried, although if you get all the files in the 
> right places I don't see any reason why it shouldn't work.

Any easy ways to do this :) ?

> > * load "ghci -package ghc" and load main/Main.hs. This work pretty well,
> > but only in comparsion to the other approaches -- that means loading
> > does not fail. Invoking ":main -c foobar.hs" freezes the ghci
> > session. With this approach I can not change any module withing
> > the packaged ghc. Is that true? But that's what I want to do (in
> > particular to the parser part).
> 
> It should be possible to do this, except that I'm fairly certain you'll run into 
> trouble if you try to run GHCi within itself due to the global state of the RTS 
> linker.  But just doing ordinary compilation in GHC loaded into GHCi should 
> work.  We have done some simple experiments using the GHC API from inside GHCi.
> 
> It sounds like there's a straightforward way to show the problem, so could you 
> submit a ticket detailing what you did to reproduce it?  Thanks.

Here is my session. I didn't noticed on the first run that it doesn't
freeze first, but only after multiple invokations. So, this puts the
thing in a different perspective. It works in principal but maybe
there are some leftovers from the previous runs. 

   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.6, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
Prelude> :cd ~/ther-devel/ghc-6.6/compiler
Prelude> :set -I. -Istage1 -cpp -fglasgow-exts -package ghc
...[remark, stage1 is populated from a compile run, in particular with ghc_boot_plattform.h]
Loading package template-haskell ... linking ... done.
...[cutted]
Loading package ghc-6.6 ... linking ... done.
Prelude> :load "/home/clemens/ther-devel/ghc-6.6/compiler/main/Main.hs"
[1 of 1] Compiling Main             ( /home/clemens/ther-devel/ghc-6.6/compiler/main/Main.hs, interpreted )
Ok, modules loaded: Main.
*Main> :main -B/usr/lib/ghc-6.6 --help
Usage:

    ghci [command-line-options-and-input-files]

...[removed]...

*** Exception: exit: ExitSuccess
*Main> :main -B/usr/lib/ghc-6.6 --help
...[freeze here .. pressed C-c]
*** Exception: exit: ExitFailure 1
*Main> 

Unless you tell me that I made some mistakes here, I will file this as
a bug with GHC trac.

Thanks, 
-- 
Fruhwirth Clemens - http://clemens.endorphin.org 
for robots: sp4mtrap at endorphin.org




More information about the Glasgow-haskell-users mailing list