help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: Native compilation by default?: Was [Re: stats say SBCL is 78 875 %


From: Eli Zaretskii
Subject: Re: Native compilation by default?: Was [Re: stats say SBCL is 78 875 % faster than natively compiled Elisp
Date: Sun, 26 Feb 2023 08:25:32 +0200

> From: Madhu <enometh@meer.net>
> Date: Sun, 26 Feb 2023 08:38:49 +0530
> 
> * Eli Zaretskii <83k00btcsl.fsf @gnu.org> :
> Wrote on Tue, 21 Feb 2023 14:37:14 +0200:
> >> From: Madhu <enometh@meer.net>
> >> Date: Tue, 21 Feb 2023 12:34:21 +0530
> 
> >> Is my understanding of the documentation - that native compilation is
> >> an automatic side effect of byte compiling, wrong?
> >
> > Yes, it's wrong.  Native compilation happens automatically when you
> > _load_ a .elc file, not when you compile it.
> 
> The info manual I was looking at (info "(elisp) Native-Compilation
> Functions") has this text
> 
>       "Native-Compilation is implemented as a side effect of
>       byte-compilation"

It goes on by saying

  Thus, compiling Lisp code natively always produces its byte code as well

So the above has nothing to do with _when_ does native compilation
happen.  It just says _how_ it works: by launching a byte-compilation
and using its by-products internally to produce native code.

> In any case maybe I should file a bug? because this the behaviour I
> reported doesn't meet the expectations. In a fresh emacs -Q: the
> following 3 forms all load a fib.elc file from the current directory
> (say "/dev/shm") without producing an eln file. ("doesn't work")
> 
> (byte-compile-file "fib.el" t)  ; doesn't work
> (load-file "fib.elc")           ; doesn't work
> (load "/dev/shm/fib.elc" nil nil t) ; doesn't work

This is a feature, so filing a bug report against it won't be useful.
Think about it: if the above would load a .eln file instead, how would
a Lisp program be able to force Emacs to load a .elc file?

Therefore, when you specify an explicit extension, be it .el or .elc,
Emacs loads that specific file, nothing more, nothing less.  Exactly
like '(load "foo.el")' in previous versions of Emacs always loaded the
.el file, even if the .elc file was available.

> The only form which works seems to be when load is called with a full
> pathname after omitting the ".el" or ".elc" suffix provided there is an
> elc at that location.
> i.e.
> (load "/dev/shm/fib")
> 
> only this form produces an eln file in the user's eln-cache directory.

That's how it is supposed to work.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]