guile modules, gnc modules, and interactive debugging.

Rob Browning rlb@defaultvalue.org
Wed, 05 Dec 2001 17:28:59 -0600


In the long run, I'd really like us to be able to work on gnucash in a
much more interactive fashion, whether that's via ilisp and emacs, or
just being able to have an active guile prompt while gnucash is
running.  Now that gnucash is just a guile script that loads shared
libraries this is much more likely to be possible.

Having a high level of interactivity can allow for some *much* faster
debugging cycles, to which I suspect most people who have worked in
good interactive environments can attest (i.e. allegro CL, MCL, emacs
elisp, etc.)

However, in order for this to work, the source has to be written to
accomodate your expectations.  For example, if you want to allow
people to (load-from-path "foo.scm") after making some changes, then
foo.scm has to be written so that re-loading it into a running guile
doesn't break anything.

Or maybe we don't care as much about re-loading whole files.  If
you're using ilisp and emacs with guile, I believe you can just put
your cursor inside a function and hit a key and that function will be
shipped off to and redefined within the running guile image.

Also, aside from plain scheme files, there's the issue of guile
modules and gnc modules.  What if you want to re-load one of those?
For guile modules, if the module is written to handle it, you should
be able to just (load-from-path "some-module-file.scm"), though this
won't catch *un*-definitions of things.

Finally, I'm not sure at all where gnc-modules stand.  I'm not sure
it's safe to unload/re-load these, though it seems a little iffy.  You
could just re-load the .scm files and maybe get those changes...

This issue is not something that I'm working on heavily at the moment,
but it is something I'd like us to keep in mind, and once we know what
we want, perhaps move toward over time.

-- 
Rob Browning
rlb @defaultvalue.org, @linuxdevel.com, and @debian.org
Previously @cs.utexas.edu
GPG=1C58 8B2C FB5E 3F64 EA5C  64AE 78FE E5FE F0CB A0AD