Hello,
I spent the last day hacking the McCLIM system definition.
My goals were:
* Adding real dependency information for files, to improve the McCLIM user experience (it's notorious for its long compile cycles after a cvs up) * Making it ASDF-INSTALLable, via a system called :MCCLIM that pulls in the :CLIM system and a suitable backend
The .asd file at URL:http://boinkor.net/lisp/mcclim.asd is the result. (Not attached because common-lisp.net doesn't allow .asd files in attachments.)
As you can see, this drops support for all non-ASDF defsystems, and gets us halfway through the first goal - I couldn't load all systems to get dependency information from them (clim-opengl, clim-beagle and scigraph), but the bigger systems like CLIM-CORE and CLIM are fully working. After a change to setf-star.lisp, ASDF now recompiles 6 files instead of 20. (-:
The second goal was easier: what I did was move the system definitions for clim-clx, clim-opengl and beagle (now clim-beagle for consistency) into the mcclim.asd file, and frobnicated the CLIM-LOOKS system to depend on the correct backend system in the right circumstances.
I'm not absolutely sure if CLIM-LOOKS' behavior is correct for Mac users (it loads beagle). If you have an MCL or OpenMCL installation, so please test. Really, I only tested it on Linux/x86/X11/SBCL. Other combinations were not tested. If you want to find out if it will work for you, install it and run it yourself.
To install the system, follow these steps:
1. put the mcclim.asd file into your McCLIM installation directory 2. symlink it to a directory in your ASDF:*CENTRAL-REPOSITORY* (for SBCL users, this is ~/.sbcl/systems) 3. On the lisp REPL, (asdf:oos 'asdf:load-op :mcclim)
If anybody does a snapshot of mcclim with this .asd file and puts the ASDF-INSTALL link on http://cliki.net/mcclim, people will also be able to asdf-install McClim.
Have fun,
Andreas Fuchs asf@boinkor.net writes:
I spent the last day hacking the McCLIM system definition.
My goals were:
- Adding real dependency information for files, to improve the McCLIM user experience (it's notorious for its long compile cycles after a cvs up)
[...]
The .asd file at URL:http://boinkor.net/lisp/mcclim.asd is the result. (Not attached because common-lisp.net doesn't allow .asd files
[...]
working. After a change to setf-star.lisp, ASDF now recompiles 6 files instead of 20. (-:
I tried doing fresh--i.e. with no previous fasl files--builds from source with both the McCLIM stock system definition in system.lisp, and yours in mcclim.asd. In the former case I evaluated:
(time (asdf:operate 'asdf:load-op :clim-clx-user))
with the following results:
; Evaluation took: ; 105.52 seconds of real time ; 98.77198 seconds of user run time ; 5.588151 seconds of system run time ; 295,305,900,480 CPU cycles ; [Run times include 17.97 seconds GC run time] ; 76 page faults and ; 2,846,968,944 bytes consed. ; NIL
With your system definition I did two fresh builds:
(time (asdf:operate 'asdf:load-op :mcclim))
with these results:
; Evaluation took: ; 114.92 seconds of real time ; 107.795616 seconds of user run time ; 6.215055 seconds of system run time ; 321,613,490,332 CPU cycles ; [Run times include 19.19 seconds GC run time] ; 0 page faults and ; 2,926,042,568 bytes consed. ; NIL
; Evaluation took: ; 105.63 seconds of real time ; 100.02179 seconds of user run time ; 5.436173 seconds of system run time ; 295,608,660,228 CPU cycles ; [Run times include 18.29 seconds GC run time] ; 0 page faults and ; 2,927,419,672 bytes consed. ; NIL
I use the latest McCLIM CVS sources with CMUCL Snapshot 2005-01 under Slackware Linux 10.0, running on a 2.8 GHz Pentium IV with 2 GB of RAM.
Paolo
Today, Paolo Amoroso amoroso@mclink.it wrote:
I tried doing fresh--i.e. with no previous fasl files--builds from source with both the McCLIM stock system definition in system.lisp, and yours in mcclim.asd. In the former case I evaluated:
(time (asdf:operate 'asdf:load-op :clim-clx-user))
with the following results:
; Evaluation took: ; 105.52 seconds of real time ; 98.77198 seconds of user run time ; 5.588151 seconds of system run time ; 295,305,900,480 CPU cycles ; [Run times include 17.97 seconds GC run time] ; 76 page faults and ; 2,846,968,944 bytes consed. ; NIL
With your system definition I did two fresh builds:
(time (asdf:operate 'asdf:load-op :mcclim))
with these results:
; Evaluation took: ; 114.92 seconds of real time ; 107.795616 seconds of user run time ; 6.215055 seconds of system run time ; 321,613,490,332 CPU cycles ; [Run times include 19.19 seconds GC run time] ; 0 page faults and ; 2,926,042,568 bytes consed. ; NIL
; Evaluation took: ; 105.63 seconds of real time ; 100.02179 seconds of user run time ; 5.436173 seconds of system run time ; 295,608,660,228 CPU cycles ; [Run times include 18.29 seconds GC run time] ; 0 page faults and ; 2,927,419,672 bytes consed. ; NIL
I use the latest McCLIM CVS sources with CMUCL Snapshot 2005-01 under Slackware Linux 10.0, running on a 2.8 GHz Pentium IV with 2 GB of RAM.
So it worked (-:
Of course, with a fresh build, there won't be any performance improvements in build time - quite to the contrary, the additional dependency information adds a bit of overhead.
The real improvements happen if you happen to touch just one file in an already-built McCLIM installation, like setf-star.lisp that I mentioned (requires 14 fewer files to be rebuilt, compared to system.lisp), or repaint.lisp (7 fewer files).
By the way, I have put up an asdf-installable tarball of yesterday's McCLIM CVS checkout (non-anonymous CVS, though).
Testers, get it via ASDF-INSTALL by running:
(asdf-install:install "http://boinkor.net/lisp/mcclim/mcclim-2005-01-31.tar.gz")
on your favorite lisp REPL. One pitfall: remove old links to system.lisp from your asdf:*central-registry* directories. I had to remove symlinks called clim.asd, clim-clx.asd, clim-clx-user.asd and clim-listener.asd.
Nice test case after you installed it:
(asdf:oos 'asdf:load-op :clim-examples) (clim-demo::run-test 'clim-demo::method-browser)
and enter clim:note-sheet-grafted (-:
Cheers,
Andreas Fuchs asf@boinkor.net writes:
The real improvements happen if you happen to touch just one file in an already-built McCLIM installation, like setf-star.lisp that I
Here are some tests done after rebuilding my brain from source--yes, fresh build...
On the same machine and setup, touching setf-star.lisp with McCLIM's system definition in system.lisp:
(time (asdf:operate 'asdf:load-op :clim-clx-user))
; Evaluation took: ; 53.7 seconds of real time ; 49.69545 seconds of user run time ; 3.013542 seconds of system run time ; 150,293,052,412 CPU cycles ; [Run times include 8.22 seconds GC run time] ; 65 page faults and ; 1,468,144,312 bytes consed. ; NIL
With your defsystem in mcclim.asd:
(time (asdf:operate 'asdf:load-op :mcclim))
; Evaluation took: ; 30.71 seconds of real time ; 29.042583 seconds of user run time ; 1.57676 seconds of system run time ; 85,941,184,796 CPU cycles ; [Run times include 4.61 seconds GC run time] ; 0 page faults and ; 827,465,488 bytes consed. ; NIL
Paolo
On 2005-01-31, Andreas Fuchs asf@boinkor.net wrote:
By the way, I have put up an asdf-installable tarball of yesterday's McCLIM CVS checkout (non-anonymous CVS, though).
Testers, get it via ASDF-INSTALL by running:
(asdf-install:install "http://boinkor.net/lisp/mcclim/mcclim-2005-01-31.tar.gz")
Alright, I put up a new asdf-installable snapshot. Features:
* Should work with OpenMCL (caveat: needs CLX pre-installed. The one from fink should work, if you have clx.asd linked from your asdf:*central-repository* directory) * more sparse dependency graph on the CLIM system - more incremental development support (-:
For a quick overview of the benefits of the second bullet, compare http://www.boinkor.net/lisp/mcclim/CLIM.ps (the old graph) and http://www.boinkor.net/lisp/mcclim/new-graphs/CLIM.ps (-:
The asdf-installable snapshot:
http://www.boinkor.net/lisp/mcclim/mcclim-2005-01-31e.tar.gz
If you pulled the previous asdf-install snapshot, you can get the updated mcclim.asd (it's all that changed) from:
http://www.boinkor.net/lisp/mcclim/testing/mcclim.asd
on your favorite lisp REPL. One pitfall: remove old links to system.lisp from your asdf:*central-registry* directories. I had to remove symlinks called clim.asd, clim-clx.asd, clim-clx-user.asd and clim-listener.asd.
Nice test case after you installed it:
(asdf:oos 'asdf:load-op :clim-examples) (clim-demo::run-test 'clim-demo::method-browser)
and enter clim:note-sheet-grafted (-:
Good luck and have fun testing it!