This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
Re: Getting rid of the "edit-compile-run-cycle" for Kawa
- From: Per Bothner <per at bothner dot com>
- To: Ethan Herdrick <info at reatlas dot com>
- Cc: kawa at sourceware dot org
- Date: Sat, 03 May 2008 08:49:15 -0700
- Subject: Re: Getting rid of the "edit-compile-run-cycle" for Kawa
- References: <91f48dbf0805030521lbeebd61ndf166c25f9e73470@mail.gmail.com>
Ethan Herdrick wrote:
Hi -
We really want to improve our dev environment for our Kawa web app.
The main problem is the "edit-compile-run-cycle". Even though Kawa is
a great language, this style of development makes it feel like we are
just using Java. It slows us down. What I want is to change some
function defined in a static module and simply refresh any page in our
app that uses that function and see the result of the change.
Have you tried this:
http://www.gnu.org/software/kawa/server/auto-servlet.html
[One of the problems I need to fix with Kawa is that finding
documentation isn't always easy. This particular file is an example
of that ...]
I haven't tested this recently, but hopefully it still works.
Please let me know. I also have some further serlvet-related
patches from various past experiments - these need to be re-tested
and integrated.
In trying to achieve this I've made a simple macro "require/smart"
that will expand to (require <foo>) if the system is in production
mode, and expand to (load "\some-path\foo.scm") if in development
mode. Of course, our existing code behaves somewhat differently when
loaded instead of required. I've been working through this but I'm
not sure what the ultimate result will be. I might be overlooking
some fatal flaw in this plan. This technique does work fine in a very
simple proof of concept with a very simple tree of dependencies made
up of three simple files of definitions.
I always discourage use of load.
In an old post to this list (found here:
http://www.sourceware.org/ml/kawa/2006-q4/msg00002.html ) Per wrote:
"...you can: (require "file-name") and it automatically compile sit,
as a module, and recompiles if it has changed. It updates the global
environment. (However, there is no support for updating existing
values -such as if an existing value references an updated function -
but that could be added.)"
That would be fantastic. What would need to be done to add that?
It should work now - though I just found a bug ...
Could it understand dependencies, i.e. recompile a class if a class it
depends on has been recompiled?
It does that, if you replace "class" by "module": A module A requires B,
and B requires C, the way it is supposed to happen is this:
If a module A requires A, it will make a dependent of B and C.
Next time the require is "executed", then the dependence of B and C
is checked. If C is modified, this will before B to be recompiled,
which will force A to be recompiled.
Or something like that - I haven't looked at it in a while.
--
--Per Bothner
per@bothner.com http://per.bothner.com/