Didier Verna <verna(a)inf.enst.fr> writes in xemacs-beta(a)xemacs.org:
> SL Baur <steve(a)xemacs.org> writes:
>> For 21.0 we're leaning towards the more flexible side at the cost of slower
>> startup. If you are building from source, you can dump anything you want.
> I'm lost. Are the packages dumped or not ? Here's what I thought I
> understood, tell me if I'm wrong or right:
> - When you build xemacs from the tarballs, all packages that are found in the
> packages directory (say /usr/local/lib/xemacs/packages) are dumped.
Ah. A vocabulary gap. The only silly questions are those left
unasked in the proper forum.
No. The term "dumped" refers to those lisp packages that are loaded
between the time temacs runs and the time the xemacs binary gets
written out. This means various things, but the important effects are
these: the bytecode is stored in the `xemacs' executable binary, and
all toplevel code has already been executed. If you (require 'foo)
where foo is a package dumped with XEmacs, Nothing Happens as it has
already been loaded. In order to get a more recent version, you have
to explicitly (load "foo"). If you edit and rebytecompile the source
lisp files in lisp/foo.el and lisp/foo.elc the changes won't be
automatically reflected the next time you start XEmacs because nothing
is being loaded at runtime.
The term "autoload" refers to a definition of a Lisp symbol that
doesn't really define the symbol, it tells the XEmacs binary where to
load the Lisp bytecode that defines the symbol. In versions of XEmacs
prior to 21.0, the autoloads were dumped with the binary, that is,
they were static[1] from the time when the build was done. In 21.0, the
autoloads are loaded at startup time.
Consider this: An XEmacs 21.0 with $prefix pointing at /usr/local.
This means that package searching will look into
/usr/local/lib/xemacs/xemacs-packages for XEmacs packages. Install
the Gnus package and then run `xemacs -vanilla' and C-h f gnus:
gnus' is an interactive autoloaded Lisp function
-- autoloads from "gnus"
...
Kill this session, rm -rf lisp/gnus from the XEmacs packages and
restart. Now C-h f gnus yields:
[No match] and won't let you complete the prompt.
The same exercise in XEmacs 20.4 will return the first result in both
case because the autoloads are dumped with the XEmacs 20.4 binary.
This *does not* mean that Gnus is dumped with the binary. It only
means that Gnus symbols are recognized by the binary with instructions
on where to load the lisp from if the symbols are evaluated.
Are things clearer now?
> - When you add a new package in the packages directory, after xemacs
> is built, the package is seen normally, appart from the fact that
> it's not dumped. THe package's autoloads are loaded at run-time.
Correct. The first statement is irrelevant. XEmacs only loads the
Lisp packages it is directed to, and it currently only loads a minimum
of stuff in order to reach an Interactive Lisp buffer without loading
anything else.
> - Now if the preceding assumptions are correct,
They're not.
> what happens when you have dumped a package with xemacs, and you
> install a new version without building xemacs again ?
In XEmacs 21, you will have the new package as if the first version of
the package *never existed*. This is a huge win. I hope more folks
can understand this.
Using the correct meaning of "dumped a package with XEmacs", nothing
will happen -- you have to redump XEmacs to get the updates and in
XEmacs 20.4, you will have the new Lisp package, but autoloads from
the previous version, so if a global function changes, it won't be
reflected in how the user sees it.
Footnotes:
[1] The `autoload' function can be run manually, but it is more
convenient to have them built automatically.