[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

MCL 2.0 final comments

Friends (& MCL wonder-workers),
Here is a first batch of comments regarding MCL 2.0 final -
1.  Overall impressions:
If you have been wondering whether or not to upgrade from 1.x, or to invest in
MCL 2.0, then now is the time.  The beta was a good product, the final release
is stunningly good, with all sorts of excellent features.  I would single out
(perhaps rather arbitrarily) the following
    - the CD has over 500 megs of material on it, of which over 60 megs is
contributed source code and demos, including demos of CLIM 1.1,
ExperTelligence's products, and a huge library of other material which would
represent a huge amount of ftping (assuming you could locate the material in
the first place).  Personally, I would recommend *every* Common Lisp user to
buy MCL 2.0 and a CD ROM drive just for this massive archive.  There are
accessible on-line docs, partial sources for MCL 2.0 itself, etc.
    - the examples have been considerably expanded, and include AppleEvent
stuff, etc.  Coupled with the additional material in the much improved
documentation, MCL is much more accessible.
    - MCL support for evolving features like AppleEvents has also been greatly
improved, and the new ephemeral gc is excellent (see below).
2.  Compatibility notes:
Upgrading from MCL 2.0b1p3 is pretty straightforward.  I have come across the
following little things of which you might like to beware:
    - if you use LOOP features, remember that these have been evolving and may
require a modest bit of tidying before they compile correctly, or to use the
compatibility loop provided (documented)
    - get-internal-run-time now seems to return a time in milliseconds, whereas
in 2.0b1, it seemed to return a time in ticks (60ths of a second), although
this does *not* appear to be documented anywhere
    - the default startup state is for egc-enabled-p to be NIL, somewhat
surprisingly, so if you want ephemeral gc to be enabled, you will need to turn
it on [with (egc t) in your init.lisp file] deliberately (if this is
documented, it is not clear!)
    - there are some other changes which are documented, e.g. logical pathnames
vs logical directories, for which you will need to watch.
3.  Benefits of egc:
[Interestingly, in evangelising MCL 2.0 to someone here, it was pointed out
that 'ephemeral gc' has also been called 'generational gc', and we wondered
whether there was any literature describing it which might merit reference?]
Ephemeral gc is a major step forward.  We have an application which does
real-time modelling of a radar display, and is clearly very sensitive to
conventional gc, which brings everything to a temporary halt.  When porting
this to MCL 2.0 final, even giving it a large partition but leaving egc off,
gcing was very noticeable and disruptive.  Under MCL 2.0b1, this was also the
case (although I fancy that standard gcing under b1 was somewhat less
frequent?).  Once egc was enabled, and without messing with the default
generation sizes, standard test runs completed using only egc and without any
gc at all, eliminating all disruption to the display and only very occasional
time 'jerks'.  The result is now very impressive indeed.
One of the examples (a thermometer bar) provides a very useful tool for
monitoring egc and gc activity, and I would recommend its use for tuning egc
and memory partitions during development of applications.
Another very happy MCL 2.0 user,