unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Enabling native compilation by default when libgccjit is present
@ 2021-12-02 19:25 Andrea Corallo
  2021-12-02 19:39 ` Eli Zaretskii
  2021-12-03 22:34 ` Michael Heerdegen
  0 siblings, 2 replies; 91+ messages in thread
From: Andrea Corallo @ 2021-12-02 19:25 UTC (permalink / raw)
  To: emacs-devel; +Cc: Eli Zaretskii

Hi all,

ATM native compilation is off by default and must be enabled manually
when configuring.

IIRC was mentioned by Eli (forgive me if I'm mistaken) that we might
want to enable it automatically when configure identifies the presence
of libgccjit on the system.

That's just a reminder cause *if* we want to do this I guess this is the
last call for 28.

Regards

  Andrea



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-02 19:25 Enabling native compilation by default when libgccjit is present Andrea Corallo
@ 2021-12-02 19:39 ` Eli Zaretskii
  2021-12-03 16:52   ` Lars Ingebrigtsen
  2021-12-03 22:34 ` Michael Heerdegen
  1 sibling, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-02 19:39 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: emacs-devel

> From: Andrea Corallo <akrl@sdf.org>
> Cc: Eli Zaretskii <eliz@gnu.org>
> Date: Thu, 02 Dec 2021 19:25:38 +0000
> 
> ATM native compilation is off by default and must be enabled manually
> when configuring.
> 
> IIRC was mentioned by Eli (forgive me if I'm mistaken) that we might
> want to enable it automatically when configure identifies the presence
> of libgccjit on the system.
> 
> That's just a reminder cause *if* we want to do this I guess this is the
> last call for 28.

I think we should do that on master, not in Emacs 28.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-02 19:39 ` Eli Zaretskii
@ 2021-12-03 16:52   ` Lars Ingebrigtsen
  2021-12-03 18:30     ` Eli Zaretskii
  2021-12-03 18:53     ` Stefan Kangas
  0 siblings, 2 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-03 16:52 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, Andrea Corallo

Eli Zaretskii <eliz@gnu.org> writes:

>> IIRC was mentioned by Eli (forgive me if I'm mistaken) that we might
>> want to enable it automatically when configure identifies the presence
>> of libgccjit on the system.
>> 
>> That's just a reminder cause *if* we want to do this I guess this is the
>> last call for 28.
>
> I think we should do that on master, not in Emacs 28.

I'm not sure that we should default it to "on" on master -- just because
it makes the build take that much longer, and I'm not sure we should
expose people casually building Emacs to that.  (And think of the CO₂
effects.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 16:52   ` Lars Ingebrigtsen
@ 2021-12-03 18:30     ` Eli Zaretskii
  2021-12-03 21:27       ` Lars Ingebrigtsen
  2021-12-03 18:53     ` Stefan Kangas
  1 sibling, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-03 18:30 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Andrea Corallo <akrl@sdf.org>,  emacs-devel@gnu.org
> Date: Fri, 03 Dec 2021 17:52:54 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I think we should do that on master, not in Emacs 28.
> 
> I'm not sure that we should default it to "on" on master -- just because
> it makes the build take that much longer, and I'm not sure we should
> expose people casually building Emacs to that.  (And think of the CO₂
> effects.)

So you think we should never make it the default?



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 16:52   ` Lars Ingebrigtsen
  2021-12-03 18:30     ` Eli Zaretskii
@ 2021-12-03 18:53     ` Stefan Kangas
  2021-12-03 21:30       ` Lars Ingebrigtsen
  1 sibling, 1 reply; 91+ messages in thread
From: Stefan Kangas @ 2021-12-03 18:53 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Eli Zaretskii; +Cc: Andrea Corallo, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> I'm not sure that we should default it to "on" on master -- just because
> it makes the build take that much longer, and I'm not sure we should
> expose people casually building Emacs to that.

What does "casually building" mean (as opposed to just "building"), and
why should such users be any less interested in having a performant
Emacs?

> (And think of the CO₂ effects.)

Won't we save CO₂ in the long run by not wasting cycles interpreting
bytecode?  Benchmarks please.  ;-)



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 18:30     ` Eli Zaretskii
@ 2021-12-03 21:27       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-03 21:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, akrl

Eli Zaretskii <eliz@gnu.org> writes:

> So you think we should never make it the default?

Presumably all distributions will have it on, so the vast majority of
Emacs users will enjoy the results..

If can be made faster, it should be switched on by default in the
development versions, too.  (I think I remember you opening an issue
about that...  hm...  yup, bug#48921.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 18:53     ` Stefan Kangas
@ 2021-12-03 21:30       ` Lars Ingebrigtsen
  2021-12-03 22:39         ` Stefan Kangas
  0 siblings, 1 reply; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-03 21:30 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: Eli Zaretskii, Andrea Corallo, emacs-devel

Stefan Kangas <stefankangas@gmail.com> writes:

> What does "casually building" mean (as opposed to just "building"), and
> why should such users be any less interested in having a performant
> Emacs?

If you just want to use a newish Emacs (as opposed to develop with it),
you're pulling down the sources and building it casually.  (And probably
updating once in a while.)

If your system is slow, doing a native build can be punishing (and might
well turn these people off Emacs altogether).

>> (And think of the CO₂ effects.)
>
> Won't we save CO₂ in the long run by not wasting cycles interpreting
> bytecode?  Benchmarks please.  ;-)

Yes please.  🙃

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-02 19:25 Enabling native compilation by default when libgccjit is present Andrea Corallo
  2021-12-02 19:39 ` Eli Zaretskii
@ 2021-12-03 22:34 ` Michael Heerdegen
  2021-12-04  7:26   ` Eli Zaretskii
  1 sibling, 1 reply; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-03 22:34 UTC (permalink / raw)
  To: emacs-devel

Andrea Corallo <akrl@sdf.org> writes:

> IIRC was mentioned by Eli (forgive me if I'm mistaken) that we might
> want to enable it automatically when configure identifies the presence
> of libgccjit on the system.

That was the call for me to try it now.  Seems to work fine! - but I was
and still am a bit annoyed by the compiler warnings that pop up whenever
an action cause a package to load (seemingly).  These popups interrupt
workflow and sometimes even cause the selected window to loose input
focus.  Is this normal?

Michael.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 21:30       ` Lars Ingebrigtsen
@ 2021-12-03 22:39         ` Stefan Kangas
  2021-12-04  2:48           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 91+ messages in thread
From: Stefan Kangas @ 2021-12-03 22:39 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, Andrea Corallo, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> If you just want to use a newish Emacs (as opposed to develop with it),
> you're pulling down the sources and building it casually.  (And probably
> updating once in a while.)
>
> If your system is slow, doing a native build can be punishing (and might
> well turn these people off Emacs altogether).

That sounds a bit odd to me.  Why would users with slow machines
constantly rebuild Emacs, to the point that they get turned off Emacs
altogether?  Wouldn't they just settle for running the latest stable
release long before that point?

My expectation would be that casual Emacs users install it with their
package manager, and those who prefer building it just use the latest
stable tarball.  (I was personally in the latter group for over a
decade, as Debian stable is constantly one release behind or so.)

Of course, many people do track master, but I would put them firmly in
the "enthusiast" camp.  Such users will surely understand that there is
a cost associated with running master, no?



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 22:39         ` Stefan Kangas
@ 2021-12-04  2:48           ` Lars Ingebrigtsen
  2021-12-04  7:48             ` Eli Zaretskii
  2021-12-04 19:28             ` Andrea Corallo
  0 siblings, 2 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-04  2:48 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: Eli Zaretskii, Andrea Corallo, emacs-devel

Stefan Kangas <stefankangas@gmail.com> writes:

> That sounds a bit odd to me.  Why would users with slow machines
> constantly rebuild Emacs, to the point that they get turned off Emacs
> altogether?  Wouldn't they just settle for running the latest stable
> release long before that point?

Emacs' release cycle is a bit slow, so there's a sizeable number of
people that build from git.

> Of course, many people do track master, but I would put them firmly in
> the "enthusiast" camp.  Such users will surely understand that there is
> a cost associated with running master, no?

I'd rather not scare away more people than necessary.  "I wanted to try
Emacs, but it took twenty minutes to build, so I'm using vim instead" is
certainly something I can see happening.

This reminds me of something I've been wondering about, but never
actually looked into.  One of the things I was expecting nativecomp to
make faster is byte compilation, but it doesn't actually seem to make
any difference, which I find really surprising.  Here's my test case:

$ rm lisp/gnus/*.elc lisp/org/*.elc ; time make -j8

This is around 10% slower with nativecomp than without, which just seems
backwards.  So I wondered whether somehow bytecomp/byte-opt and friends
weren't compiled natively or something, but dropping in 

(message "HELLO: %S" (type-of (symbol-function 'byte-compile-warning-enabled-p)))

into gnus.el indicates that it is.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-03 22:34 ` Michael Heerdegen
@ 2021-12-04  7:26   ` Eli Zaretskii
  2021-12-07  4:38     ` Michael Heerdegen
  0 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-04  7:26 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Date: Fri, 03 Dec 2021 23:34:50 +0100
> 
> Andrea Corallo <akrl@sdf.org> writes:
> 
> > IIRC was mentioned by Eli (forgive me if I'm mistaken) that we might
> > want to enable it automatically when configure identifies the presence
> > of libgccjit on the system.
> 
> That was the call for me to try it now.  Seems to work fine! - but I was
> and still am a bit annoyed by the compiler warnings that pop up whenever
> an action cause a package to load (seemingly).  These popups interrupt
> workflow and sometimes even cause the selected window to loose input
> focus.  Is this normal?

It is normal, yes.  You are supposed to either fix the warnings by
adding the missing 'require's, or tell Emacs not to natively-compile
the files where you don't want that (like your init files), or
customize the option to turn off the warnings.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-04  2:48           ` Lars Ingebrigtsen
@ 2021-12-04  7:48             ` Eli Zaretskii
  2021-12-04 19:28             ` Andrea Corallo
  1 sibling, 0 replies; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-04  7:48 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: akrl, stefankangas, emacs-devel

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org,  Andrea Corallo
>  <akrl@sdf.org>
> Date: Sat, 04 Dec 2021 03:48:18 +0100
> 
> This reminds me of something I've been wondering about, but never
> actually looked into.  One of the things I was expecting nativecomp to
> make faster is byte compilation, but it doesn't actually seem to make
> any difference, which I find really surprising.  Here's my test case:
> 
> $ rm lisp/gnus/*.elc lisp/org/*.elc ; time make -j8
> 
> This is around 10% slower with nativecomp than without, which just seems
> backwards.

IME, byte compilation gets significantly faster once bytecomp.el,
byte-opt.el, comp.el and comp-cstr.el are natively-compiled.  But I
never benchmarked that, so it's just an impression from watching the
compilation run.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-04  2:48           ` Lars Ingebrigtsen
  2021-12-04  7:48             ` Eli Zaretskii
@ 2021-12-04 19:28             ` Andrea Corallo
  2021-12-04 19:41               ` Lars Ingebrigtsen
  1 sibling, 1 reply; 91+ messages in thread
From: Andrea Corallo @ 2021-12-04 19:28 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, Stefan Kangas, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Stefan Kangas <stefankangas@gmail.com> writes:
>
>> That sounds a bit odd to me.  Why would users with slow machines
>> constantly rebuild Emacs, to the point that they get turned off Emacs
>> altogether?  Wouldn't they just settle for running the latest stable
>> release long before that point?
>
> Emacs' release cycle is a bit slow, so there's a sizeable number of
> people that build from git.
>
>> Of course, many people do track master, but I would put them firmly in
>> the "enthusiast" camp.  Such users will surely understand that there is
>> a cost associated with running master, no?
>
> I'd rather not scare away more people than necessary.  "I wanted to try
> Emacs, but it took twenty minutes to build, so I'm using vim instead" is
> certainly something I can see happening.

I'm not sure this scenarion is very likely to happen.  Lets consider
that it would be used *only* if libgccjit is installed on the system.
At present AFAIK the only big project relying on libgccjit is us, so
most likely libgccjit is not installed unless the user did it
voluntarily.

Regards

  Andrea



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-04 19:28             ` Andrea Corallo
@ 2021-12-04 19:41               ` Lars Ingebrigtsen
  2021-12-04 19:57                 ` Andrea Corallo
  2021-12-05  5:04                 ` Richard Stallman
  0 siblings, 2 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-04 19:41 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, Stefan Kangas, emacs-devel

Andrea Corallo <akrl@sdf.org> writes:

> I'm not sure this scenarion is very likely to happen.  Lets consider
> that it would be used *only* if libgccjit is installed on the system.
> At present AFAIK the only big project relying on libgccjit is us, so
> most likely libgccjit is not installed unless the user did it
> voluntarily.

That's a good point.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-04 19:41               ` Lars Ingebrigtsen
@ 2021-12-04 19:57                 ` Andrea Corallo
  2021-12-05  5:04                 ` Richard Stallman
  1 sibling, 0 replies; 91+ messages in thread
From: Andrea Corallo @ 2021-12-04 19:57 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, Stefan Kangas, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Andrea Corallo <akrl@sdf.org> writes:
>
>> I'm not sure this scenarion is very likely to happen.  Lets consider
>> that it would be used *only* if libgccjit is installed on the system.
>> At present AFAIK the only big project relying on libgccjit is us, so
>> most likely libgccjit is not installed unless the user did it
>> voluntarily.
>
> That's a good point.

That's also the reason why I think the outcome of this discussion *ATM*
would not change much on the field :)

  Andrea



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-04 19:41               ` Lars Ingebrigtsen
  2021-12-04 19:57                 ` Andrea Corallo
@ 2021-12-05  5:04                 ` Richard Stallman
  2021-12-05  5:09                   ` Lars Ingebrigtsen
  1 sibling, 1 reply; 91+ messages in thread
From: Richard Stallman @ 2021-12-05  5:04 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: eliz, emacs-devel, stefankangas, akrl

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

I think that native compilation is too new to enable by default.
There is no rush about this.

Let's release Emacs 28 with it disabled by default.  That will give us
a year or two to (1) make it really reliable and (2) let users decide
which they prefer.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:04                 ` Richard Stallman
@ 2021-12-05  5:09                   ` Lars Ingebrigtsen
  2021-12-05  5:29                     ` Po Lu
  2021-12-06  4:33                     ` Richard Stallman
  0 siblings, 2 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05  5:09 UTC (permalink / raw)
  To: Richard Stallman; +Cc: eliz, emacs-devel, stefankangas, akrl

Richard Stallman <rms@gnu.org> writes:

> I think that native compilation is too new to enable by default.
> There is no rush about this.
>
> Let's release Emacs 28 with it disabled by default.  That will give us
> a year or two to (1) make it really reliable and (2) let users decide
> which they prefer.

We're not discussing the defaults in Emacs 28, but on master.

Most distributions will probably release Emacs 28.1 with native
compilation switched on.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:09                   ` Lars Ingebrigtsen
@ 2021-12-05  5:29                     ` Po Lu
  2021-12-05  5:31                       ` Lars Ingebrigtsen
  2021-12-06  4:33                     ` Richard Stallman
  1 sibling, 1 reply; 91+ messages in thread
From: Po Lu @ 2021-12-05  5:29 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Richard Stallman, eliz, emacs-devel, stefankangas, akrl

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Richard Stallman <rms@gnu.org> writes:
>
>> I think that native compilation is too new to enable by default.
>> There is no rush about this.
>>
>> Let's release Emacs 28 with it disabled by default.  That will give us
>> a year or two to (1) make it really reliable and (2) let users decide
>> which they prefer.
>
> We're not discussing the defaults in Emacs 28, but on master.

Please give it a while before making that change.

I have the libgccjit development packages installed, so changing my
muscle memory to type `./configure --without-native-compilation'
whenever I want to build Emacs (for testing purposes, for instance)
would be quite difficult.

I think that applies to many other people as well.

> Most distributions will probably release Emacs 28.1 with native
> compilation switched on.

Why is that so?  Most distributions only build their Emacs packages with
the default options.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:29                     ` Po Lu
@ 2021-12-05  5:31                       ` Lars Ingebrigtsen
  2021-12-05  5:46                         ` Po Lu
  2021-12-05  5:54                         ` Tim Cross
  0 siblings, 2 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05  5:31 UTC (permalink / raw)
  To: Po Lu; +Cc: eliz, akrl, stefankangas, Richard Stallman, emacs-devel

Po Lu <luangruo@yahoo.com> writes:

>> Most distributions will probably release Emacs 28.1 with native
>> compilation switched on.
>
> Why is that so?  Most distributions only build their Emacs packages with
> the default options.

Several distributions have signalled that they want to ship Emacs with
native compilation switched on (and at least one said they're going to
be doing a full ahead-of-time build, if I remember correctly) --
presumably because that'll give their users a faster Emacs.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:31                       ` Lars Ingebrigtsen
@ 2021-12-05  5:46                         ` Po Lu
  2021-12-05  5:48                           ` Lars Ingebrigtsen
  2021-12-05  5:54                         ` Tim Cross
  1 sibling, 1 reply; 91+ messages in thread
From: Po Lu @ 2021-12-05  5:46 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: eliz, akrl, stefankangas, Richard Stallman, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Po Lu <luangruo@yahoo.com> writes:
>
>>> Most distributions will probably release Emacs 28.1 with native
>>> compilation switched on.
>>
>> Why is that so?  Most distributions only build their Emacs packages with
>> the default options.

> Several distributions have signalled that they want to ship Emacs with
> native compilation switched on (and at least one said they're going to
> be doing a full ahead-of-time build, if I remember correctly) --
> presumably because that'll give their users a faster Emacs.

Could you give a definitive list?

Otherwise, "several" to me doesn't sound like "most".  I can plausibly
imagine distributions such as Arch doing so, but not much more aside
from that.

Some distributions will probably have separate packages (like what we
have with distributions shipping emacs, emacs-lucid, and emacs-nox) for
native compilation, but I cannot imagine it becoming the default.

Thanks.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:46                         ` Po Lu
@ 2021-12-05  5:48                           ` Lars Ingebrigtsen
  2021-12-05  6:00                             ` Po Lu
  0 siblings, 1 reply; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05  5:48 UTC (permalink / raw)
  To: Po Lu; +Cc: eliz, emacs-devel, stefankangas, Richard Stallman, akrl

Po Lu <luangruo@yahoo.com> writes:

> Could you give a definitive list?

No, these are just vague recollections.

> Otherwise, "several" to me doesn't sound like "most".  I can plausibly
> imagine distributions such as Arch doing so, but not much more aside
> from that.

What do you base your imagination here on?  😀

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:31                       ` Lars Ingebrigtsen
  2021-12-05  5:46                         ` Po Lu
@ 2021-12-05  5:54                         ` Tim Cross
  2021-12-05  8:20                           ` Eli Zaretskii
                                             ` (4 more replies)
  1 sibling, 5 replies; 91+ messages in thread
From: Tim Cross @ 2021-12-05  5:54 UTC (permalink / raw)
  To: emacs-devel


Lars Ingebrigtsen <larsi@gnus.org> writes:

> Po Lu <luangruo@yahoo.com> writes:
>
>>> Most distributions will probably release Emacs 28.1 with native
>>> compilation switched on.
>>
>> Why is that so?  Most distributions only build their Emacs packages with
>> the default options.
>
> Several distributions have signalled that they want to ship Emacs with
> native compilation switched on (and at least one said they're going to
> be doing a full ahead-of-time build, if I remember correctly) --
> presumably because that'll give their users a faster Emacs.

Does it actually give that much of a performance boost? It has been a
couple of months since I tried native compilation in Emacs 28, but when
I did, I noticed next to no performance improvement at all. In fact, all
I did notice was lots of warnings and significant delays whenever I
updated packages.

I stopped using it partly because of all the warnings and delays when
updating packages, but mainly because I seemed to run into a number of
issues with org mode (most of which I think have now been addressed).
I've actually never noticed any speed problems with Emacs. Where there
are delays, it is due to the synchronous nature of what I'm doing rather
than basic performance. Besides, the slowest component in my environment
is the old bit of slow carbon using the keyboard :-)




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:48                           ` Lars Ingebrigtsen
@ 2021-12-05  6:00                             ` Po Lu
  0 siblings, 0 replies; 91+ messages in thread
From: Po Lu @ 2021-12-05  6:00 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: eliz, emacs-devel, stefankangas, Richard Stallman, akrl

Lars Ingebrigtsen <larsi@gnus.org> writes:

>> Otherwise, "several" to me doesn't sound like "most".  I can plausibly
>> imagine distributions such as Arch doing so, but not much more aside
>> from that.

> What do you base your imagination here on?  😀

This is getting to become some kind of tangent, so one last message :)

Users of that GNU distribution tend to overlap with the people who chase
performance to an extreme, so I can imagine them caring enough about
such a speedup to enable it by default.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:54                         ` Tim Cross
@ 2021-12-05  8:20                           ` Eli Zaretskii
  2021-12-05 11:27                           ` Stefan Kangas
                                             ` (3 subsequent siblings)
  4 siblings, 0 replies; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-05  8:20 UTC (permalink / raw)
  To: Tim Cross; +Cc: emacs-devel

> From: Tim Cross <theophilusx@gmail.com>
> Date: Sun, 05 Dec 2021 16:54:02 +1100
> 
> Does it actually give that much of a performance boost?

IME, it's significantly faster, yes.  When you start a new version for
the first time, it takes a couple of minutes before it compiles all
the Lisp files you have routinely loaded (my build is not a full AOT
build, per the default, so only the preloaded Lisp files are natively
compiled as part of the build), but after that the performance is
tangibly better, and when it later needs to compile additional Lisp
files when they are first loaded, that doesn't affect the UX in any
significant way, AFAICT.

> It has been a couple of months since I tried native compilation in
> Emacs 28, but when I did, I noticed next to no performance
> improvement at all. In fact, all I did notice was lots of warnings
> and significant delays whenever I updated packages.

I don't install, let alone update, packages, so my experience doesn't
include that.  Caveat emptor.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:54                         ` Tim Cross
  2021-12-05  8:20                           ` Eli Zaretskii
@ 2021-12-05 11:27                           ` Stefan Kangas
  2021-12-05 14:15                           ` Jose A. Ortega Ruiz
                                             ` (2 subsequent siblings)
  4 siblings, 0 replies; 91+ messages in thread
From: Stefan Kangas @ 2021-12-05 11:27 UTC (permalink / raw)
  To: Tim Cross, emacs-devel

Tim Cross <theophilusx@gmail.com> writes:

> In fact, all I did notice was lots of warnings and significant delays
> whenever I updated packages.

The warnings is a common complaint.  Though it is a known problem and we
are thinking about how to address it.

(I find it makes Emacs unusable for the first couple of minutes in my
first session after recompiling from master, due to the large number of
warnings from third-party packages, so I feel your pain.)



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:54                         ` Tim Cross
  2021-12-05  8:20                           ` Eli Zaretskii
  2021-12-05 11:27                           ` Stefan Kangas
@ 2021-12-05 14:15                           ` Jose A. Ortega Ruiz
  2021-12-05 16:52                             ` Arthur Miller
                                               ` (2 more replies)
  2021-12-07  0:34                           ` João Pedro de Amorim Paula
  2021-12-09 17:00                           ` David Koppelman
  4 siblings, 3 replies; 91+ messages in thread
From: Jose A. Ortega Ruiz @ 2021-12-05 14:15 UTC (permalink / raw)
  To: emacs-devel

On Sun, Dec 05 2021, Tim Cross wrote:

> Lars Ingebrigtsen <larsi@gnus.org> writes:
>
>> Po Lu <luangruo@yahoo.com> writes:
>>
>>>> Most distributions will probably release Emacs 28.1 with native
>>>> compilation switched on.
>>>
>>> Why is that so?  Most distributions only build their Emacs packages with
>>> the default options.
>>
>> Several distributions have signalled that they want to ship Emacs with
>> native compilation switched on (and at least one said they're going to
>> be doing a full ahead-of-time build, if I remember correctly) --
>> presumably because that'll give their users a faster Emacs.
>
> Does it actually give that much of a performance boost? It has been a
> couple of months since I tried native compilation in Emacs 28, but when
> I did, I noticed next to no performance improvement at all. In fact, all
> I did notice was lots of warnings and significant delays whenever I
> updated packages.

FWIW, i've used native compilation in master builds on and off for a
couple of months, on GNU/Linux (debian sid), and haven't noticed any
speed difference either. Last time was this week.  The warnings are
gone, not sure if it's because i configured some flag back in the day or
because it's now the default, and the compilation delays are not too
bad; but, as i said, i don't notice any difference other than the fact
that the RAM comsumption of emacs is about 80% higher for long sessions
when i use native compilation (i use emacs for virtually everything,
it's my X11 desktop environment, and have a moderate amount of packages
installed (around 50, i think)).

> I've actually never noticed any speed problems with Emacs. Where there
> are delays, it is due to the synchronous nature of what I'm doing rather
> than basic performance.

That's also mostly my experience.  The only times i have to wait a bit
(some seconds) are for eww to render some pages (and that doesn't happen
often), and those waiting times don't seem to change at all when i
enable native compilation.

I'd be curious to know where people are seeing speedups.

Cheers,
jao
-- 
I have lived in this world just long enough to look carefully the
second time into things that I am most certain of the first
time. -Josh Billings, columnist and humorist (21 Apr 1818-1885)




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 14:15                           ` Jose A. Ortega Ruiz
@ 2021-12-05 16:52                             ` Arthur Miller
  2021-12-05 17:42                               ` Jose A. Ortega Ruiz
  2021-12-05 17:10                             ` Óscar Fuentes
  2021-12-05 20:00                             ` Jim Myhrberg
  2 siblings, 1 reply; 91+ messages in thread
From: Arthur Miller @ 2021-12-05 16:52 UTC (permalink / raw)
  To: Jose A. Ortega Ruiz; +Cc: emacs-devel

"Jose A. Ortega Ruiz" <jao@gnu.org> writes:

> On Sun, Dec 05 2021, Tim Cross wrote:
>
>> Lars Ingebrigtsen <larsi@gnus.org> writes:
>>
>>> Po Lu <luangruo@yahoo.com> writes:
>>>
>>>>> Most distributions will probably release Emacs 28.1 with native
>>>>> compilation switched on.
>>>>
>>>> Why is that so?  Most distributions only build their Emacs packages with
>>>> the default options.
>>>
>>> Several distributions have signalled that they want to ship Emacs with
>>> native compilation switched on (and at least one said they're going to
>>> be doing a full ahead-of-time build, if I remember correctly) --
>>> presumably because that'll give their users a faster Emacs.
>>
>> Does it actually give that much of a performance boost? It has been a
>> couple of months since I tried native compilation in Emacs 28, but when
>> I did, I noticed next to no performance improvement at all. In fact, all
>> I did notice was lots of warnings and significant delays whenever I
>> updated packages.
>
> FWIW, i've used native compilation in master builds on and off for a
> couple of months, on GNU/Linux (debian sid), and haven't noticed any
> speed difference either. Last time was this week.  The warnings are
> gone, not sure if it's because i configured some flag back in the day or
> because it's now the default, and the compilation delays are not too
> bad; but, as i said, i don't notice any difference other than the fact
> that the RAM comsumption of emacs is about 80% higher for long sessions
> when i use native compilation (i use emacs for virtually everything,
> it's my X11 desktop environment, and have a moderate amount of packages
> installed (around 50, i think)).
>
>> I've actually never noticed any speed problems with Emacs. Where there
>> are delays, it is due to the synchronous nature of what I'm doing rather
>> than basic performance.
>
> That's also mostly my experience.  The only times i have to wait a bit
> (some seconds) are for eww to render some pages (and that doesn't happen
> often), and those waiting times don't seem to change at all when i
> enable native compilation.
>
> I'd be curious to know where people are seeing speedups.

I see speedups in like entire Emacs experience, since the very first
incarnation of 'gccemacs' when Andrea announced it.

When I sometimes compile Emacs without native compiler just to test or compare
something it feels like I will never go back to Emacs without native compiler if
I don't have to. It is not like the native compiler enabled something I couldn't
do before, if it is than it is not my use-case, so I am not aware of it. But it
is overal resposivness of Emacs, in Helm completions, searches, etc. I haven't
done som formal benchmarks, but for me it feels more responsive and speedier
especially when there are lots of files and buffers.

It depends on how one use Emacs of course. Personally I use Emacs for almost
everything I do on the computer, and I like Helm, so there is a lot of
completions and searches I do.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 14:15                           ` Jose A. Ortega Ruiz
  2021-12-05 16:52                             ` Arthur Miller
@ 2021-12-05 17:10                             ` Óscar Fuentes
  2021-12-05 19:25                               ` Jose A. Ortega Ruiz
                                                 ` (3 more replies)
  2021-12-05 20:00                             ` Jim Myhrberg
  2 siblings, 4 replies; 91+ messages in thread
From: Óscar Fuentes @ 2021-12-05 17:10 UTC (permalink / raw)
  To: emacs-devel

"Jose A. Ortega Ruiz" <jao@gnu.org> writes:

> I'd be curious to know where people are seeing speedups.

In my experience nativecomp is somewhat noticeable while using lsp-mode.

Otherwise, not much, if at all.

The reason for this is not hard to understand for anyone with a little
bit of knowledge about binary code optimization. For instance, if your
Elisp code consists on invoking opaque C primitives, the gain of
compiling it to machine instructions will be mostly irrelevant.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
@ 2021-12-05 17:24 Angelo Graziosi
  0 siblings, 0 replies; 91+ messages in thread
From: Angelo Graziosi @ 2021-12-05 17:24 UTC (permalink / raw)
  To: emacs-devel@gnu.org

> I'd be curious to know where people are seeing speedups.

No. That's why I immediately added '--without-native-compilation' to my building scripts..



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 16:52                             ` Arthur Miller
@ 2021-12-05 17:42                               ` Jose A. Ortega Ruiz
  2021-12-05 20:48                                 ` Arthur Miller
  0 siblings, 1 reply; 91+ messages in thread
From: Jose A. Ortega Ruiz @ 2021-12-05 17:42 UTC (permalink / raw)
  To: emacs-devel

On Sun, Dec 05 2021, Arthur Miller wrote:

[...]

> It depends on how one use Emacs of course. Personally I use Emacs for
> almost everything I do on the computer,

so do i...

> and I like Helm, so there is a lot of completions and searches I do.

... and i'm also a very heavy user of completion/search in all contexts,
but in my case it's consult/embark/vertico/mct, and i don't feel them
sluggish or any better with nc... but maybe it's a subjective feeling
(the memory footprint rattles me :)) and actual measurements would
reveal i am wrong.  or maybe i should switch to helm :))

cheers,
jao
-- 
Life isn't about finding yourself. Life is about creating yourself.
   -George Bernard Shaw, writer, Nobel laureate (1856-1950)




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 17:10                             ` Óscar Fuentes
@ 2021-12-05 19:25                               ` Jose A. Ortega Ruiz
  2021-12-05 20:55                                 ` Óscar Fuentes
  2021-12-05 19:40                               ` Lars Ingebrigtsen
                                                 ` (2 subsequent siblings)
  3 siblings, 1 reply; 91+ messages in thread
From: Jose A. Ortega Ruiz @ 2021-12-05 19:25 UTC (permalink / raw)
  To: emacs-devel

On Sun, Dec 05 2021, Óscar Fuentes wrote:

> The reason for this is not hard to understand for anyone with a little
> bit of knowledge about binary code optimization. For instance, if your
> Elisp code consists on invoking opaque C primitives, the gain of
> compiling it to machine instructions will be mostly irrelevant.

Well, yes; i am pretty sure that if i went package by package and read
the code i use, the lack of speedups would most probably make sense; but
i find it curious that i am using so little "elisp-heavy" code, given
the variety of contexts in which i use emacs; somehow i was expecting
more what Arthur or Eli report, an overall improvement.  Maybe i'm just
lucky in avoiding cpu intensive pure elisp code (i don't use lsp servers
either), or, more generally, optimizable elisp, and there's in fact a
noticeable effect for most heavy users.  It is interesting that the
patterns can be so markedly different.

Thanks,
jao
-- 
Saying that you don't care about privacy because you don't have
anything to hide is like saying you don't care about freedom of speech
because you have nothing to say. - Edward Snowden



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 17:10                             ` Óscar Fuentes
  2021-12-05 19:25                               ` Jose A. Ortega Ruiz
@ 2021-12-05 19:40                               ` Lars Ingebrigtsen
  2021-12-05 20:02                                 ` Eli Zaretskii
                                                   ` (2 more replies)
  2021-12-05 21:15                               ` Arthur Miller
  2021-12-06  4:33                               ` Richard Stallman
  3 siblings, 3 replies; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05 19:40 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

Óscar Fuentes <ofv@wanadoo.es> writes:

>> I'd be curious to know where people are seeing speedups.
>
> In my experience nativecomp is somewhat noticeable while using lsp-mode.
>
> Otherwise, not much, if at all.

In some micro-benchmarks, I see significant speedups.  Let's see...
what did I test last...

Right:

---
;; (benchmark-run 1000 (benchy))

(defun benchy ()
  (let ((syms 0))
    (mapatoms (lambda (sym)
		(setq syms (+ syms (length (symbol-name sym)))))
	      obarray)
    syms))
---

This is 50% faster with nativecomp than without.

It's easy to be fooled when trying to benchmark, since an "emacs -Q"
doesn't native-comp the bits you're trying to benchmark, necessarily.
(Unless you've done a full AOT build, which most people don't.)

But still, even when that's done correctly, the nativecomp speedups are
pretty elusive in real world code.  For instance, I'd expect shr
rendering to be significantly speeded up when doing table-based layouts,
because it's doing a lot of...  stuff.  But:

(benchmark-run 10 (eww-open-file "/tmp/foo.html"))

stubbornly takes the same amount of time with or without nativecomp,
and it's the same way with every real bit of code I've tested (like byte
compilation, which I'd also expect to be faster with nativecomp).

So I don't know whether something is defeating nativecomp things in more
complex situations.

> The reason for this is not hard to understand for anyone with a little
> bit of knowledge about binary code optimization. For instance, if your
> Elisp code consists on invoking opaque C primitives, the gain of
> compiling it to machine instructions will be mostly irrelevant.

My micro-benchmark up there is almost all opaque C primitives, but is
helped a lot.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 14:15                           ` Jose A. Ortega Ruiz
  2021-12-05 16:52                             ` Arthur Miller
  2021-12-05 17:10                             ` Óscar Fuentes
@ 2021-12-05 20:00                             ` Jim Myhrberg
  2021-12-06  1:03                               ` Dmitry Gutov
  2 siblings, 1 reply; 91+ messages in thread
From: Jim Myhrberg @ 2021-12-05 20:00 UTC (permalink / raw)
  To: Jose A. Ortega Ruiz; +Cc: emacs-devel

Hi, first time I'm participating on the devel list here, but I wanted to chime in with my experience using native compilation on macOS.

> I'd be curious to know where people are seeing speedups.

On macOS, native compilation is the single biggest improvement/feature I've seen since I started using Emacs in 2011.

Before native-comp, Emacs' performance was for the most part acceptable, sluggish in some areas, and sometimes just plain horrible. Especially in larger Ruby RSpec test files (over 400-500 lines), where each keystroke could take somewhere around 100-1000ms to register. Native-comp solved all of that for me, with everything being fast and responsive, even those worst case scenario RSpec files.

Basically, I simply cannot live without native compilation anymore, to the point I've gone through the hassle to setup nightly builds via GitHub Actions, so new builds are waiting for me when I wake up.

As for if native compilation should be enabled by default, I'd say it might be simpler/safer if it needs to be explicitly enabled. One reason for it, is that on macOS "make install" with native-comp enabled does not produce a Emacs.app bundle which can be distributed to other machines without them first needing to install gcc, libgccgit, and potentially other homebrew formulas. Bundling all external dependencies including libgccjit/gcc into Emacs.app is a rather complicated process, made even more complicated if you want to sign and notarize the app too. I've got a quite a bit of code in my build script to handle it for my own builds.

--jimeh


^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 19:40                               ` Lars Ingebrigtsen
@ 2021-12-05 20:02                                 ` Eli Zaretskii
  2021-12-05 20:32                                   ` Lars Ingebrigtsen
  2021-12-05 20:37                                 ` Óscar Fuentes
  2021-12-05 21:44                                 ` Arthur Miller
  2 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-05 20:02 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: ofv, emacs-devel

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Sun, 05 Dec 2021 20:40:43 +0100
> Cc: emacs-devel@gnu.org
> 
> But still, even when that's done correctly, the nativecomp speedups are
> pretty elusive in real world code.  For instance, I'd expect shr
> rendering to be significantly speeded up when doing table-based layouts,
> because it's doing a lot of...  stuff.  But:
> 
> (benchmark-run 10 (eww-open-file "/tmp/foo.html"))
> 
> stubbornly takes the same amount of time with or without nativecomp,
> and it's the same way with every real bit of code I've tested (like byte
> compilation, which I'd also expect to be faster with nativecomp).

Profile it.  In my testing, 2/3 of the time is taken by GC, and
nativecomp cannot possibly speed up that.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 20:02                                 ` Eli Zaretskii
@ 2021-12-05 20:32                                   ` Lars Ingebrigtsen
  2021-12-05 23:03                                     ` Stefan Monnier
  0 siblings, 1 reply; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05 20:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: ofv, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> Profile it.  In my testing, 2/3 of the time is taken by GC, and
> nativecomp cannot possibly speed up that.

GC takes 25% of the time in my tests (and 72% in `eww-render') in both
native and non-native with this test and a Hacker News web page
downloaded:

(progn
  (require 'eww)
  (profiler-start 'cpu)
  (benchmark-run 10 (eww-open-file "/tmp/foo.html"))
  (profiler-report))

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 19:40                               ` Lars Ingebrigtsen
  2021-12-05 20:02                                 ` Eli Zaretskii
@ 2021-12-05 20:37                                 ` Óscar Fuentes
  2021-12-05 21:44                                 ` Arthur Miller
  2 siblings, 0 replies; 91+ messages in thread
From: Óscar Fuentes @ 2021-12-05 20:37 UTC (permalink / raw)
  To: emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

>> The reason for this is not hard to understand for anyone with a little
>> bit of knowledge about binary code optimization. For instance, if your
>> Elisp code consists on invoking opaque C primitives, the gain of
>> compiling it to machine instructions will be mostly irrelevant.
>
> My micro-benchmark up there is almost all opaque C primitives, but is
> helped a lot.

I guess nativecomp knows and lowers some of those primitives, i.e. they
are not opaque.

Also, when the primitives are simple, the time used on Elisp "glue code"
that passes results from one primitive to the next can be significant.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 17:42                               ` Jose A. Ortega Ruiz
@ 2021-12-05 20:48                                 ` Arthur Miller
  0 siblings, 0 replies; 91+ messages in thread
From: Arthur Miller @ 2021-12-05 20:48 UTC (permalink / raw)
  To: Jose A. Ortega Ruiz; +Cc: emacs-devel

"Jose A. Ortega Ruiz" <jao@gnu.org> writes:

> On Sun, Dec 05 2021, Arthur Miller wrote:
>
> [...]
>
>> It depends on how one use Emacs of course. Personally I use Emacs for
>> almost everything I do on the computer,
>
> so do i...
>
>> and I like Helm, so there is a lot of completions and searches I do.
>
> ... and i'm also a very heavy user of completion/search in all contexts,
> but in my case it's consult/embark/vertico/mct, and i don't feel them
> sluggish or any better with nc... but maybe it's a subjective feeling
> (the memory footprint rattles me :)) and actual measurements would
> reveal i am wrong.  or maybe i should switch to helm :))

I can't tell you about that. I have been using Helm long before the completion
framework explosion and am too lazy to chase web for bits and bolts to replace
my setup and re-learn/re-configure everything. As long as Helm works well, I
don't care.

To clarify: I don't experience "slugishness"; I never felt like Helm was slugish
before native compiler either. As I tried to explain in my post,
it is not like I feel that something was broken and now is fixed, but I do
percieve noticable difference in overal Emacs resposivness.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 19:25                               ` Jose A. Ortega Ruiz
@ 2021-12-05 20:55                                 ` Óscar Fuentes
  2021-12-05 22:59                                   ` Stefan Monnier
  0 siblings, 1 reply; 91+ messages in thread
From: Óscar Fuentes @ 2021-12-05 20:55 UTC (permalink / raw)
  To: emacs-devel

"Jose A. Ortega Ruiz" <jao@gnu.org> writes:

> On Sun, Dec 05 2021, Óscar Fuentes wrote:
>
>> The reason for this is not hard to understand for anyone with a little
>> bit of knowledge about binary code optimization. For instance, if your
>> Elisp code consists on invoking opaque C primitives, the gain of
>> compiling it to machine instructions will be mostly irrelevant.
>
> Well, yes; i am pretty sure that if i went package by package and read
> the code i use, the lack of speedups would most probably make sense; but
> i find it curious that i am using so little "elisp-heavy" code, given
> the variety of contexts in which i use emacs; somehow i was expecting
> more what Arthur or Eli report, an overall improvement.  Maybe i'm just
> lucky in avoiding cpu intensive pure elisp code (i don't use lsp servers
> either), or, more generally, optimizable elisp, and there's in fact a
> noticeable effect for most heavy users.  It is interesting that the
> patterns can be so markedly different.

There is a survivorship bias at play here. Code that was deemed slow on
Elisp was implemented on C (and this is happening since machines were
extremely slow compared to today's, so there are plenty of functions
implemented in C that would make no difference on user experience if
they were translated to Elisp nowadays.) Ironically, having so many
functions on C makes nativecomp slow.

In other cases Emacs resorted to external processes (or modules, more
recently) to do the job.

And then some projects were never implemented because Elisp performance
is inadequate.

So the result is that currently we have little Elisp code were
nativecomp can theorically make a difference. More so when the metrics
we use is U.I. responsiveness: projects that failed on that criteria
never achieved popularity.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 17:10                             ` Óscar Fuentes
  2021-12-05 19:25                               ` Jose A. Ortega Ruiz
  2021-12-05 19:40                               ` Lars Ingebrigtsen
@ 2021-12-05 21:15                               ` Arthur Miller
  2021-12-06  4:33                               ` Richard Stallman
  3 siblings, 0 replies; 91+ messages in thread
From: Arthur Miller @ 2021-12-05 21:15 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

Óscar Fuentes <ofv@wanadoo.es> writes:

> "Jose A. Ortega Ruiz" <jao@gnu.org> writes:
>
>> I'd be curious to know where people are seeing speedups.
>
> In my experience nativecomp is somewhat noticeable while using lsp-mode.
>
> Otherwise, not much, if at all.
>
> The reason for this is not hard to understand for anyone with a little
> bit of knowledge about binary code optimization. For instance, if your
> Elisp code consists on invoking opaque C primitives, the gain of
> compiling it to machine instructions will be mostly irrelevant.

Yes of course, I would definitely agree with you. Native comp has nothing to do
with the C code; and while it does optimization, it is not so much about
optimization, but difference between executing machine code vs interpretted byte
code.

C core is also not all of Emacs. Emacs itself implement lots of functionality in
Lisp code, and packages add usually lots of functionality on top of that. If you
have lots of packages, some people claim they use hundreds, there is lot more
than just executing C wrappers most of time.

But as general idea I do agree with you, if all of emacs functionality was built
in C, and Lisp was just tiny wrapper around, there would be no need for native
comp.

I also have to admit that I am not sure if I understand correctly *what* is
compiled; by what I mean which functions are compiled. As I read original docs on
gccemacs by Andrea, in update 1, he says:

"Just top level functions are native compiled, the others (lambda included) are
still kept as byte-code."

I know that in some later update he said that all lambdas are now compiled
too, inclusive anonymous. However I am still not sure what is status on the
others.

Also I wonder how are cl-defmethods in EIEIO compiled: if they are native (or
even byte-code) compiled? If I understand correctly, they are stored in property
list of their respective cl-generic symbol. For example, Helm is build with
EIEIO, so I am not sure if Helm itself is getting much benefit of native comp,
but I am not sure, just speculating now. It would be nice if someone who has
insight can give bit more explanation.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 19:40                               ` Lars Ingebrigtsen
  2021-12-05 20:02                                 ` Eli Zaretskii
  2021-12-05 20:37                                 ` Óscar Fuentes
@ 2021-12-05 21:44                                 ` Arthur Miller
  2021-12-05 21:48                                   ` Lars Ingebrigtsen
  2 siblings, 1 reply; 91+ messages in thread
From: Arthur Miller @ 2021-12-05 21:44 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Óscar Fuentes, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Óscar Fuentes <ofv@wanadoo.es> writes:
>
>>> I'd be curious to know where people are seeing speedups.
>>
>> In my experience nativecomp is somewhat noticeable while using lsp-mode.
>>
>> Otherwise, not much, if at all.
>
> In some micro-benchmarks, I see significant speedups.  Let's see...
> what did I test last...
>
> Right:
>
> ---
> ;; (benchmark-run 1000 (benchy))
>
> (defun benchy ()
>   (let ((syms 0))
>     (mapatoms (lambda (sym)
> 		(setq syms (+ syms (length (symbol-name sym)))))
> 	      obarray)
>     syms))
> ---
>
> This is 50% faster with nativecomp than without.
>
> It's easy to be fooled when trying to benchmark, since an "emacs -Q"
> doesn't native-comp the bits you're trying to benchmark, necessarily.
> (Unless you've done a full AOT build, which most people don't.)
>
> But still, even when that's done correctly, the nativecomp speedups are
> pretty elusive in real world code.  For instance, I'd expect shr
> rendering to be significantly speeded up when doing table-based layouts,
> because it's doing a lot of...  stuff.  But:
>
> (benchmark-run 10 (eww-open-file "/tmp/foo.html"))
>
> stubbornly takes the same amount of time with or without nativecomp,
> and it's the same way with every real bit of code I've tested (like byte
> compilation, which I'd also expect to be faster with nativecomp).
>
> So I don't know whether something is defeating nativecomp things in more
> complex situations.

Have you tried speed 3 with native comp?

>> The reason for this is not hard to understand for anyone with a little
>> bit of knowledge about binary code optimization. For instance, if your
>> Elisp code consists on invoking opaque C primitives, the gain of
>> compiling it to machine instructions will be mostly irrelevant.
>
> My micro-benchmark up there is almost all opaque C primitives, but is
> helped a lot.

If I remember old days before native-comp, anonymous lambads were not
byte-compiled? I maybe missunderstand, but that means the above lambda is
running interpretted without native comp, but with native comp it gets compiled
(update 8: https://akrl.sdf.org/gccemacs.html#orga9203de) and update 9 talkes
something about lambda performance. I am not sure that kicks in to be honest,
maybe I missunderstand.

After second thought I also think that Helm is getting help a lot by lambda
performance, which might explain why Emacs feels snappier in my case.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 21:44                                 ` Arthur Miller
@ 2021-12-05 21:48                                   ` Lars Ingebrigtsen
  2021-12-05 22:58                                     ` Arthur Miller
  0 siblings, 1 reply; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05 21:48 UTC (permalink / raw)
  To: Arthur Miller; +Cc: Óscar Fuentes, emacs-devel

Arthur Miller <arthur.miller@live.com> writes:

> Have you tried speed 3 with native comp?

No, it's not usually used.

> If I remember old days before native-comp, anonymous lambads were not
> byte-compiled?

They have been for many years.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 21:48                                   ` Lars Ingebrigtsen
@ 2021-12-05 22:58                                     ` Arthur Miller
  0 siblings, 0 replies; 91+ messages in thread
From: Arthur Miller @ 2021-12-05 22:58 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Óscar Fuentes, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Arthur Miller <arthur.miller@live.com> writes:
>
>> Have you tried speed 3 with native comp?
>
> No, it's not usually used.
>
>> If I remember old days before native-comp, anonymous lambads were not
>> byte-compiled?
>
> They have been for many years.

Ah ok :). I never looked at it; just learned long time ago I should use defuns
instead of lambdas in hooks and kept to that.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 20:55                                 ` Óscar Fuentes
@ 2021-12-05 22:59                                   ` Stefan Monnier
  0 siblings, 0 replies; 91+ messages in thread
From: Stefan Monnier @ 2021-12-05 22:59 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> There is a survivorship bias at play here. Code that was deemed slow on
> Elisp was implemented on C

Or rewritten to use a different approach that relies more heavily on
existing functions coded in C (in some cases the result can be
algorithmically less efficient, but faster in practice because of the
constants involved).


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 20:32                                   ` Lars Ingebrigtsen
@ 2021-12-05 23:03                                     ` Stefan Monnier
  2021-12-05 23:05                                       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 91+ messages in thread
From: Stefan Monnier @ 2021-12-05 23:03 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, ofv, emacs-devel

> GC takes 25% of the time in my tests (and 72% in `eww-render') in both

25% of time spent in the GC is poor, but that can happen.
72% of time spent in the GC is not acceptable.
Someone™ should investigate this.


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 23:03                                     ` Stefan Monnier
@ 2021-12-05 23:05                                       ` Lars Ingebrigtsen
  2021-12-05 23:27                                         ` Stefan Monnier
  0 siblings, 1 reply; 91+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-05 23:05 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ofv, Eli Zaretskii, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> GC takes 25% of the time in my tests (and 72% in `eww-render') in both
>
> 25% of time spent in the GC is poor, but that can happen.
> 72% of time spent in the GC is not acceptable.
> Someone™ should investigate this.

72% time is spent in `eww-render'.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 23:05                                       ` Lars Ingebrigtsen
@ 2021-12-05 23:27                                         ` Stefan Monnier
  0 siblings, 0 replies; 91+ messages in thread
From: Stefan Monnier @ 2021-12-05 23:27 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, ofv, emacs-devel

Lars Ingebrigtsen [2021-12-06 00:05:58] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> GC takes 25% of the time in my tests (and 72% in `eww-render') in both
>> 25% of time spent in the GC is poor, but that can happen.
>> 72% of time spent in the GC is not acceptable.
>> Someone™ should investigate this.
> 72% time is spent in `eww-render'.

Ah, right, thanks for supplementing my poor reading skills.


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 20:00                             ` Jim Myhrberg
@ 2021-12-06  1:03                               ` Dmitry Gutov
  2021-12-06  2:50                                 ` Jim Myhrberg
  0 siblings, 1 reply; 91+ messages in thread
From: Dmitry Gutov @ 2021-12-06  1:03 UTC (permalink / raw)
  To: Jim Myhrberg, Jose A. Ortega Ruiz; +Cc: emacs-devel

Hi!

On 05.12.2021 23:00, Jim Myhrberg wrote:
> Especially in larger Ruby RSpec test files (over 400-500 lines), where each keystroke could take somewhere around 100-1000ms to register. Native-comp solved all of that for me, with everything being fast and responsive, even those worst case scenario RSpec files.

Was that with lsp-mode enabled?

Because otherwise, I routinely edit RSpec files longer than that, with 
no sluggishness like the one you described.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-06  1:03                               ` Dmitry Gutov
@ 2021-12-06  2:50                                 ` Jim Myhrberg
  2021-12-06 12:59                                   ` Dmitry Gutov
  0 siblings, 1 reply; 91+ messages in thread
From: Jim Myhrberg @ 2021-12-06  2:50 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Jose A. Ortega Ruiz, emacs-devel

>> Especially in larger Ruby RSpec test files (over 400-500 lines), where each keystroke could take somewhere around 100-1000ms to register. Native-comp solved all of that for me, with everything being fast and responsive, even those worst case scenario RSpec files.
> 
> Was that with lsp-mode enabled?
> 
> Because otherwise, I routinely edit RSpec files longer than that, with no sluggishness like the one you described.

I having lsp-mode on or off didn’t really have much of an effect, and I’d had performance issues since before lsp-mode existed. Though the biggest performance killer in long heavily indented rspec files was the highlight-indent-guides package. But even with that turned off, various operations were still pretty slow most of the time, specially inserting a new line which would often take a good 300-500ms on those problematic files.

Admittedly, I’ve not really tried running Emacs without native-comp for nearly a year, and it was nearly 18 months ago I started using native-comp builds. I’m curious now though, so I’ll create a local master build without native comp tomorrow and see how it behaves.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:09                   ` Lars Ingebrigtsen
  2021-12-05  5:29                     ` Po Lu
@ 2021-12-06  4:33                     ` Richard Stallman
  1 sibling, 0 replies; 91+ messages in thread
From: Richard Stallman @ 2021-12-06  4:33 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: eliz, emacs-devel, stefankangas, akrl

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > We're not discussing the defaults in Emacs 28, but on master.

Sorry.  (That wasn't visible in the message I responded to.)

  > Most distributions will probably release Emacs 28.1 with native
  > compilation switched on.

For a binary distribution, one of the reasons to prefer it off,
speeding the build, would not apply.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05 17:10                             ` Óscar Fuentes
                                                 ` (2 preceding siblings ...)
  2021-12-05 21:15                               ` Arthur Miller
@ 2021-12-06  4:33                               ` Richard Stallman
  2021-12-06 12:59                                 ` Eli Zaretskii
  3 siblings, 1 reply; 91+ messages in thread
From: Richard Stallman @ 2021-12-06  4:33 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > The reason for this is not hard to understand for anyone with a little
  > bit of knowledge about binary code optimization. For instance, if your
  > Elisp code consists on invoking opaque C primitives, the gain of
  > compiling it to machine instructions will be mostly irrelevant.

I wonder if this could be a guide towards doing native compilation
only in the cases where it will provide a benefit.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-06  4:33                               ` Richard Stallman
@ 2021-12-06 12:59                                 ` Eli Zaretskii
  2021-12-06 13:57                                   ` Stefan Monnier
  0 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-06 12:59 UTC (permalink / raw)
  To: rms; +Cc: ofv, emacs-devel

> From: Richard Stallman <rms@gnu.org>
> Date: Sun, 05 Dec 2021 23:33:54 -0500
> Cc: emacs-devel@gnu.org
> 
>   > The reason for this is not hard to understand for anyone with a little
>   > bit of knowledge about binary code optimization. For instance, if your
>   > Elisp code consists on invoking opaque C primitives, the gain of
>   > compiling it to machine instructions will be mostly irrelevant.
> 
> I wonder if this could be a guide towards doing native compilation
> only in the cases where it will provide a benefit.

I don't think this could fly in practice, because I see no way of
predicting when it will provide a benefit.  The same primitives could
be combined into very different Lisp programs, and no useful program
consists only of calls to primitives, there's always some Lisp
involved.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-06  2:50                                 ` Jim Myhrberg
@ 2021-12-06 12:59                                   ` Dmitry Gutov
  0 siblings, 0 replies; 91+ messages in thread
From: Dmitry Gutov @ 2021-12-06 12:59 UTC (permalink / raw)
  To: Jim Myhrberg; +Cc: Jose A. Ortega Ruiz, emacs-devel

On 06.12.2021 05:50, Jim Myhrberg wrote:
>>> Especially in larger Ruby RSpec test files (over 400-500 lines), where each keystroke could take somewhere around 100-1000ms to register. Native-comp solved all of that for me, with everything being fast and responsive, even those worst case scenario RSpec files.
>>
>> Was that with lsp-mode enabled?
>>
>> Because otherwise, I routinely edit RSpec files longer than that, with no sluggishness like the one you described.
> 
> I having lsp-mode on or off didn’t really have much of an effect, and I’d had performance issues since before lsp-mode existed. Though the biggest performance killer in long heavily indented rspec files was the highlight-indent-guides package. But even with that turned off, various operations were still pretty slow most of the time, specially inserting a new line which would often take a good 300-500ms on those problematic files.

highlight-indent-guides sounds like it could have an impact indeed, if 
it recomputes indentation for every displayed line on every keypress.

Although reindenting a screen-ful takes about 120ms here, not anything 
close to 1s. And that's without native compilation.

> Admittedly, I’ve not really tried running Emacs without native-comp for nearly a year, and it was nearly 18 months ago I started using native-comp builds. I’m curious now though, so I’ll create a local master build without native comp tomorrow and see how it behaves.

If native-comp helps (which would be natural, given that all indentation 
code is in Lisp), it might be good enough. But it might be worthwhile to 
find the exact bottlenecks and file the corresponding issues. Maybe in 
the aforementioned package. Maybe against ruby-mode. Maybe somewhere else.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-06 12:59                                 ` Eli Zaretskii
@ 2021-12-06 13:57                                   ` Stefan Monnier
  2021-12-06 14:08                                     ` Eli Zaretskii
  0 siblings, 1 reply; 91+ messages in thread
From: Stefan Monnier @ 2021-12-06 13:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rms, ofv, emacs-devel

> I don't think this could fly in practice, because I see no way of
> predicting when it will provide a benefit.

I'm pretty sure it can fly in some practice, but I think it would have
to be a JIT rather than AOT compiler: rather than having to predict the
proportion of time spent in subrs vs time spent in bytecode.c, it could
measure it and (re)compile the parts that seem most promising.
I think Java's HotSpot compiler was among the firsts to do this kind
of thing, but I expect it's fairly widespread in JIT compilers nowadays.


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-06 13:57                                   ` Stefan Monnier
@ 2021-12-06 14:08                                     ` Eli Zaretskii
  2021-12-07 16:02                                       ` Matt Armstrong
  0 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-06 14:08 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ofv, rms, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: rms@gnu.org,  ofv@wanadoo.es,  emacs-devel@gnu.org
> Date: Mon, 06 Dec 2021 08:57:40 -0500
> 
> > I don't think this could fly in practice, because I see no way of
> > predicting when it will provide a benefit.
> 
> I'm pretty sure it can fly in some practice, but I think it would have
> to be a JIT rather than AOT compiler: rather than having to predict the
> proportion of time spent in subrs vs time spent in bytecode.c, it could
> measure it and (re)compile the parts that seem most promising.
> I think Java's HotSpot compiler was among the firsts to do this kind
> of thing, but I expect it's fairly widespread in JIT compilers nowadays.

Sounds like a good idea for a PhD.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:54                         ` Tim Cross
                                             ` (2 preceding siblings ...)
  2021-12-05 14:15                           ` Jose A. Ortega Ruiz
@ 2021-12-07  0:34                           ` João Pedro de Amorim Paula
  2021-12-08  4:34                             ` Richard Stallman
  2021-12-09 17:00                           ` David Koppelman
  4 siblings, 1 reply; 91+ messages in thread
From: João Pedro de Amorim Paula @ 2021-12-07  0:34 UTC (permalink / raw)
  To: Tim Cross, emacs-devel

On 05 December 2021 16:54, Tim Cross <theophilusx@gmail.com> wrote:

> Does it actually give that much of a performance boost? It has been a
> couple of months since I tried native compilation in Emacs 28, but when
> I did, I noticed next to no performance improvement at all. In fact, all
> I did notice was lots of warnings and significant delays whenever I
> updated packages.

Chiming in to say that yes, it does give a huge performance boost! I'll
also take the opportunity to congratulate everyone that worked on it,
specially Andrea. I have some packages installed, but compared to the
average Doom Emacs user I have a pretty bare bones setup, but I don't
know if I'm just picky, but Emacs had a small, ms delay when doing
movement on a buffer, specially if it has some heavy syntax highlighting
(which I actively avoid). But with native compilation I don't notice
that anymore, to the point that Emacs seems to respond and react before
I even register the action itself by pressing some key! As someone with
ADHD this is greatly appreciated; now my Emacs can do stuff at the speed
of my thought, which was almost the case before, only lagging a couple
of milliseconds behind.

> I stopped using it partly because of all the warnings and delays when
> updating packages, but mainly because I seemed to run into a number of
> issues with org mode (most of which I think have now been addressed).
> I've actually never noticed any speed problems with Emacs. Where there
> are delays, it is due to the synchronous nature of what I'm doing rather
> than basic performance. Besides, the slowest component in my environment
> is the old bit of slow carbon using the keyboard :-)

I have the following on my =early-init.el=:

    ;; be silent about warnings
    (setq native-comp-async-report-warnings-errors 'silent)

and the warnings don't bother me anymore. They populate the =*Warnings*=
buffer but that's all.

-- 
João Pedro de Amorim Paula
IT undergraduate at Universidade Federal do Rio Grande do Norte (UFRN)

^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-04  7:26   ` Eli Zaretskii
@ 2021-12-07  4:38     ` Michael Heerdegen
  2021-12-07  5:02       ` Michael Heerdegen
  2021-12-07 13:53       ` Eli Zaretskii
  0 siblings, 2 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-07  4:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> It is normal, yes.  You are supposed to either fix the warnings by
> adding the missing 'require's, or tell Emacs not to natively-compile
> the files where you don't want that (like your init files), or
> customize the option to turn off the warnings.

But don't you think these warnings should not be presented to the end
user who maybe doesn't know what these warnings mean?  I mean, these
warnings pop up while using Emacs, not when installing or upgrading.
Even after every restart.  And it takes a while, and there are a lot.  I
think that has to be improved before it gets the default behavior in a
release.  But maybe that's planned anyway, then sorry for the noise.

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07  4:38     ` Michael Heerdegen
@ 2021-12-07  5:02       ` Michael Heerdegen
  2021-12-07 13:59         ` Eli Zaretskii
  2021-12-07 13:53       ` Eli Zaretskii
  1 sibling, 1 reply; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-07  5:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Michael Heerdegen <michael_heerdegen@web.de> writes:

> But don't you think these warnings should not be presented to the end
> user who maybe doesn't know what these warnings mean?

A different point is that some of my libraries seemingly stopped working
due to native compilation.  Are there additional requirements for the
source files for native compilation?  Why do I get additional warnings
(and even errors) at all?

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07  4:38     ` Michael Heerdegen
  2021-12-07  5:02       ` Michael Heerdegen
@ 2021-12-07 13:53       ` Eli Zaretskii
  2021-12-08  2:25         ` Michael Heerdegen
  1 sibling, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-07 13:53 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: emacs-devel@gnu.org
> Date: Tue, 07 Dec 2021 05:38:41 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > It is normal, yes.  You are supposed to either fix the warnings by
> > adding the missing 'require's, or tell Emacs not to natively-compile
> > the files where you don't want that (like your init files), or
> > customize the option to turn off the warnings.
> 
> But don't you think these warnings should not be presented to the end
> user who maybe doesn't know what these warnings mean?  I mean, these
> warnings pop up while using Emacs, not when installing or upgrading.

That these warning appear during routine usage is a direct consequence
of JIT compilation.  This JIT compilation can be disabled, but IMO
doing so by default would make little sense.  So the warnings are the
price we pay for having Emacs silently compile code in the background.
But once we agree to have it compile automatically, it should be clear
that messages related to compilation will be produced, and ignoring
those messages might not necessarily be a good idea.

> Even after every restart.

No, not unless the code changes between restarts.  If the code doesn't
change, then this compilation is a one-time thing (assuming you left
Emacs up and running enough seconds to allow it to finish the
compilation).

> And it takes a while, and there are a lot.

The first time you fire up Emacs with native-compilation, yes, it
can take a few minutes (how many depends on how many packages you load
at startup).  But again, this is a one-time thing, and it is quite
fast even the first time.

> I think that has to be improved before it gets the default behavior
> in a release.

We don't build Emacs with native-compilation by default yet, you have
to request that at configure time.  This discussion is about the
warnings which are emitted when you did request feature, not about
whether the feature itself should be included by default.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07  5:02       ` Michael Heerdegen
@ 2021-12-07 13:59         ` Eli Zaretskii
  2021-12-08  2:31           ` Michael Heerdegen
  2021-12-08  8:16           ` Andreas Schwab
  0 siblings, 2 replies; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-07 13:59 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: emacs-devel@gnu.org
> Date: Tue, 07 Dec 2021 06:02:25 +0100
> 
> Michael Heerdegen <michael_heerdegen@web.de> writes:
> 
> > But don't you think these warnings should not be presented to the end
> > user who maybe doesn't know what these warnings mean?
> 
> A different point is that some of my libraries seemingly stopped working
> due to native compilation.

Please report those cases as bugs.  They could be real bugs or they
could be something in your code that needs amendment, but please don't
leave them unreported, especially during the pretest -- that is what
the pretest is for.

> Are there additional requirements for the source files for native
> compilation?  Why do I get additional warnings (and even errors) at
> all?

You get additional warnings because each of the *.el files is compiled
in a separate Emacs process, which starts from a clean state.  By
contrast, it may be the case that your code says something like

  (require 'foo)
  ....
  (require 'bar)

and 'bar' uses some stuff in 'foo' under the assumption that 'foo' is
always loaded before 'bar'.  Since native-compilation will compile
'foo' and 'bar' separately, it will emit warnings.

The solution is either to fix such hidden dependencies, or (if you
have too many of those and cannot be bothered) avoid native-compiling
those files by placing the "no-native-compile: t" cookie in them.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-06 14:08                                     ` Eli Zaretskii
@ 2021-12-07 16:02                                       ` Matt Armstrong
  2021-12-07 16:55                                         ` tomas
  2021-12-07 17:02                                         ` T.V Raman
  0 siblings, 2 replies; 91+ messages in thread
From: Matt Armstrong @ 2021-12-07 16:02 UTC (permalink / raw)
  To: Eli Zaretskii, Stefan Monnier; +Cc: ofv, rms, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Stefan Monnier <monnier@iro.umontreal.ca>
>> Cc: rms@gnu.org,  ofv@wanadoo.es,  emacs-devel@gnu.org
>> Date: Mon, 06 Dec 2021 08:57:40 -0500
>> 
>> > I don't think this could fly in practice, because I see no way of
>> > predicting when it will provide a benefit.
>> 
>> I'm pretty sure it can fly in some practice, but I think it would have
>> to be a JIT rather than AOT compiler: rather than having to predict the
>> proportion of time spent in subrs vs time spent in bytecode.c, it could
>> measure it and (re)compile the parts that seem most promising.
>> I think Java's HotSpot compiler was among the firsts to do this kind
>> of thing, but I expect it's fairly widespread in JIT compilers nowadays.
>
> Sounds like a good idea for a PhD.

Indeed, PhDs have been completed in this area.

Beyond hot spot, JIT in dynamic languages can use other techniques, such
as specializing the JITed code to the concrete types the code sees in
practice, etc.  I'm not an expert so I'll stop there.

I find the approach taken by Ruby's new YJIT interesting.  They achieve
low "warm up time" before reaching peak performance, and the approach
doesn't significantly reduce the performance of not-yet-JITed code.

https://shopify.engineering/yjit-just-in-time-compiler-cruby is a good
summary.  The primary lead on he project recently got a PhD in the
technique used.

I don't see any technical barriers preventing Emacs and/or Guile from
taking the same kinds of approach, but it would be a large effort,
requiring deep expertise.  It might make more sense to do it in Guile,
in the hopes of making Guile Emacs an attractive proposition.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07 16:02                                       ` Matt Armstrong
@ 2021-12-07 16:55                                         ` tomas
  2021-12-07 17:02                                         ` T.V Raman
  1 sibling, 0 replies; 91+ messages in thread
From: tomas @ 2021-12-07 16:55 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 954 bytes --]

On Tue, Dec 07, 2021 at 08:02:20AM -0800, Matt Armstrong wrote:

[...]

> Indeed, PhDs have been completed in this area.
> 
> Beyond hot spot, JIT in dynamic languages can use other techniques, such
> as specializing the JITed code to the concrete types the code sees in
> practice, etc.  I'm not an expert so I'll stop there.

[...]

> I don't see any technical barriers preventing Emacs and/or Guile from
> taking the same kinds of approach, but it would be a large effort,
> requiring deep expertise.  It might make more sense to do it in Guile,
> in the hopes of making Guile Emacs an attractive proposition.

Guile is either nearly or already there [1]. To understand the ref one
has to know that Andy Wingo, the current Guile maintainer works on
Javascript implementations for browsers, for which such techniques are
essential.

Cheers

[1] https://wingolog.org/archives/2020/06/03/a-baseline-compiler-for-guile

-- 
t 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07 16:02                                       ` Matt Armstrong
  2021-12-07 16:55                                         ` tomas
@ 2021-12-07 17:02                                         ` T.V Raman
  1 sibling, 0 replies; 91+ messages in thread
From: T.V Raman @ 2021-12-07 17:02 UTC (permalink / raw)
  To: Matt Armstrong; +Cc: Eli Zaretskii, Stefan Monnier, ofv, rms, emacs-devel

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=gb18030, Size: 2501 bytes --]

Matt Armstrong <matt@rfc20.org> writes:


The best explanation I have heard on this was from Stefan a while ago
where he pointed out that the .eln files should be generated from the
.elc files, not the .el files, see that thread.

The warnings are annoying but that is not the worst of it, some of them
--- likely a small number are real.

In the past when I have said this, Eli has challenged me to file bugs
for each one, but that is infeasible --- so for my own use I've disabled
native-comp and moved on.

Andrea -- you've done wonderful work here, but please  make sure that
the last mile isn't left unpaved ---> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: Stefan Monnier <monnier@iro.umontreal.ca>
>>> Cc: rms@gnu.org,  ofv@wanadoo.es,  emacs-devel@gnu.org
>>> Date: Mon, 06 Dec 2021 08:57:40 -0500
>>> 
>>> > I don't think this could fly in practice, because I see no way of
>>> > predicting when it will provide a benefit.
>>> 
>>> I'm pretty sure it can fly in some practice, but I think it would have
>>> to be a JIT rather than AOT compiler: rather than having to predict the
>>> proportion of time spent in subrs vs time spent in bytecode.c, it could
>>> measure it and (re)compile the parts that seem most promising.
>>> I think Java's HotSpot compiler was among the firsts to do this kind
>>> of thing, but I expect it's fairly widespread in JIT compilers nowadays.
>>
>> Sounds like a good idea for a PhD.
>
> Indeed, PhDs have been completed in this area.
>
> Beyond hot spot, JIT in dynamic languages can use other techniques, such
> as specializing the JITed code to the concrete types the code sees in
> practice, etc.  I'm not an expert so I'll stop there.
>
> I find the approach taken by Ruby's new YJIT interesting.  They achieve
> low "warm up time" before reaching peak performance, and the approach
> doesn't significantly reduce the performance of not-yet-JITed code.
>
> https://shopify.engineering/yjit-just-in-time-compiler-cruby is a good
> summary.  The primary lead on he project recently got a PhD in the
> technique used.
>
> I don't see any technical barriers preventing Emacs and/or Guile from
> taking the same kinds of approach, but it would be a large effort,
> requiring deep expertise.  It might make more sense to do it in Guile,
> in the hopes of making Guile Emacs an attractive proposition.
>

-- 

Thanks,

--Raman(I Search, I Find, I Misplace, I Research)
7©4 Id: kg:/m/0285kf1  •0Ü8



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07 13:53       ` Eli Zaretskii
@ 2021-12-08  2:25         ` Michael Heerdegen
  2021-12-08  2:40           ` Po Lu
                             ` (2 more replies)
  0 siblings, 3 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-08  2:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> But once we agree to have it compile automatically, it should be clear
> that messages related to compilation will be produced, and ignoring
> those messages might not necessarily be a good idea.

Once this gets the default, the following will happen: regular users
that are not programmers will install packages and libraries, and then
they will get the popup warning windows.  For Elisp developers this is
good and useful, but for regular users this will cause confusion and
annoy for no gain.  That's my concern.  Maybe the popup of the window
should be opt-in - unless it's due to my config that the window
containing the warnings pops up and even raises its frame.

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07 13:59         ` Eli Zaretskii
@ 2021-12-08  2:31           ` Michael Heerdegen
  2021-12-08  9:55             ` Robert Pluim
  2021-12-08 12:52             ` Eli Zaretskii
  2021-12-08  8:16           ` Andreas Schwab
  1 sibling, 2 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-08  2:31 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> Please report those cases as bugs.

Ok, will do.  So far adding `require' calls fixed everything I touched.

> You get additional warnings because each of the *.el files is compiled
> in a separate Emacs process, which starts from a clean state.  By
> contrast, it may be the case that your code says something like
>
>   (require 'foo)
>   ....
>   (require 'bar)
>
> and 'bar' uses some stuff in 'foo' under the assumption that 'foo' is
> always loaded before 'bar'.  Since native-compilation will compile
> 'foo' and 'bar' separately, it will emit warnings.

So `foo' requiring `bar' is enough?  Ok, that would be natural and
normal, I expected something worse.  Thanks for the explanation.

Is this information unobvious enough to be added as a note to the
manual text describing native compilation?  Now is seems obvious to me
but yesterday it wasn't.

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:25         ` Michael Heerdegen
@ 2021-12-08  2:40           ` Po Lu
  2021-12-08  3:39             ` Michael Heerdegen
  2021-12-08 13:52             ` Stefan Monnier
  2021-12-08 12:51           ` Eli Zaretskii
  2021-12-09  4:13           ` Richard Stallman
  2 siblings, 2 replies; 91+ messages in thread
From: Po Lu @ 2021-12-08  2:40 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: Eli Zaretskii, emacs-devel

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Once this gets the default, the following will happen: regular users
> that are not programmers will install packages and libraries, and then
> they will get the popup warning windows.  For Elisp developers this is
> good and useful, but for regular users this will cause confusion and
> annoy for no gain.  That's my concern.  Maybe the popup of the window
> should be opt-in - unless it's due to my config that the window
> containing the warnings pops up and even raises its frame.

But how are those warnings different from what the user will get if he
runs `package-install' on a package that causes warnings from the
byte-compiler?



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:40           ` Po Lu
@ 2021-12-08  3:39             ` Michael Heerdegen
  2021-12-08 12:55               ` Eli Zaretskii
  2021-12-08 17:08               ` T.V Raman
  2021-12-08 13:52             ` Stefan Monnier
  1 sibling, 2 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-08  3:39 UTC (permalink / raw)
  To: emacs-devel

Po Lu <luangruo@yahoo.com> writes:

> But how are those warnings different from what the user will get if he
> runs `package-install' on a package that causes warnings from the
> byte-compiler?

Depends on when these warnings appear.  When they appear as normal side
effect when installing something, they are not different.  When they
appear out of nothing, delayed, from a background process, they are
different because the user not necessarily knows that they are related
to the installation.

Most packages installed here were installed before turning native comp
on.  Maybe the experience is different when installing stuff after
switching, I haven't checked.  But lots of regular
(non-Emacs-developer) users will undergo the same switch some time in
the future, with already installed packages. 

Michael.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07  0:34                           ` João Pedro de Amorim Paula
@ 2021-12-08  4:34                             ` Richard Stallman
  0 siblings, 0 replies; 91+ messages in thread
From: Richard Stallman @ 2021-12-08  4:34 UTC (permalink / raw)
  To: João Pedro de Amorim Paula; +Cc: theophilusx, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > Chiming in to say that yes, it does give a huge performance boost!

I think we are all curious what sort of activities you
observe the improved performance in.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-07 13:59         ` Eli Zaretskii
  2021-12-08  2:31           ` Michael Heerdegen
@ 2021-12-08  8:16           ` Andreas Schwab
  2021-12-08 13:21             ` Eli Zaretskii
  1 sibling, 1 reply; 91+ messages in thread
From: Andreas Schwab @ 2021-12-08  8:16 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Michael Heerdegen, emacs-devel

On Dez 07 2021, Eli Zaretskii wrote:

> You get additional warnings because each of the *.el files is compiled
> in a separate Emacs process, which starts from a clean state.  By
> contrast, it may be the case that your code says something like
>
>   (require 'foo)
>   ....
>   (require 'bar)
>
> and 'bar' uses some stuff in 'foo' under the assumption that 'foo' is
> always loaded before 'bar'.  Since native-compilation will compile
> 'foo' and 'bar' separately, it will emit warnings.

This is in no way dependent on native compilation, though.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:31           ` Michael Heerdegen
@ 2021-12-08  9:55             ` Robert Pluim
  2021-12-09  0:56               ` Michael Heerdegen
  2021-12-08 12:52             ` Eli Zaretskii
  1 sibling, 1 reply; 91+ messages in thread
From: Robert Pluim @ 2021-12-08  9:55 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: Eli Zaretskii, emacs-devel

>>>>> On Wed, 08 Dec 2021 03:31:57 +0100, Michael Heerdegen <michael_heerdegen@web.de> said:
    Michael> So `foo' requiring `bar' is enough?  Ok, that would be natural and
    Michael> normal, I expected something worse.  Thanks for the explanation.

    Michael> Is this information unobvious enough to be added as a note to the
    Michael> manual text describing native compilation?  Now is seems obvious to me
    Michael> but yesterday it wasn't.

Please check the latest version of the emacs lisp manual in emacs-28.

Robert
-- 



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:25         ` Michael Heerdegen
  2021-12-08  2:40           ` Po Lu
@ 2021-12-08 12:51           ` Eli Zaretskii
  2021-12-09  0:44             ` Michael Heerdegen
  2021-12-09  4:13           ` Richard Stallman
  2 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-08 12:51 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: emacs-devel@gnu.org
> Date: Wed, 08 Dec 2021 03:25:03 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > But once we agree to have it compile automatically, it should be clear
> > that messages related to compilation will be produced, and ignoring
> > those messages might not necessarily be a good idea.
> 
> Once this gets the default, the following will happen: regular users
> that are not programmers will install packages and libraries, and then
> they will get the popup warning windows.  For Elisp developers this is
> good and useful, but for regular users this will cause confusion and
> annoy for no gain.  That's my concern.  Maybe the popup of the window
> should be opt-in - unless it's due to my config that the window
> containing the warnings pops up and even raises its frame.

The JIT compilation doesn't just happen randomly because Emacs decides
it's an opportune moment for it.  It happens because the session loads
some Lisp file.  A live Emacs session used for real-life work will
always load Lisp files, as needed.  Loading a Lisp file (via 'load' or
'require' or any similar API) could potentially pop up warnings and
errors without any relation to native compilation, because something
went wrong while loading.  I presume you won't argue for shutting up
such messages caused by some problems in the load process or in the
interaction of the loaded code with what you already have in the
session, would you?  Then how are the warnings triggered by JIT
compilation different, in principle?  They are the same phenomenon:
Emacs loaded some Lisp package because some command needed it, and
loading it caused warnings due to issues with the loaded code.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:31           ` Michael Heerdegen
  2021-12-08  9:55             ` Robert Pluim
@ 2021-12-08 12:52             ` Eli Zaretskii
  1 sibling, 0 replies; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-08 12:52 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: emacs-devel@gnu.org
> Date: Wed, 08 Dec 2021 03:31:57 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > You get additional warnings because each of the *.el files is compiled
> > in a separate Emacs process, which starts from a clean state.  By
> > contrast, it may be the case that your code says something like
> >
> >   (require 'foo)
> >   ....
> >   (require 'bar)
> >
> > and 'bar' uses some stuff in 'foo' under the assumption that 'foo' is
> > always loaded before 'bar'.  Since native-compilation will compile
> > 'foo' and 'bar' separately, it will emit warnings.
> 
> So `foo' requiring `bar' is enough?

In most cases, yes.  Or using the various autoload forms.

> Is this information unobvious enough to be added as a note to the
> manual text describing native compilation?  Now is seems obvious to me
> but yesterday it wasn't.

As Robert points out, we just added it.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  3:39             ` Michael Heerdegen
@ 2021-12-08 12:55               ` Eli Zaretskii
  2021-12-08 17:08               ` T.V Raman
  1 sibling, 0 replies; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-08 12:55 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Date: Wed, 08 Dec 2021 04:39:17 +0100
> 
> Po Lu <luangruo@yahoo.com> writes:
> 
> > But how are those warnings different from what the user will get if he
> > runs `package-install' on a package that causes warnings from the
> > byte-compiler?
> 
> Depends on when these warnings appear.  When they appear as normal side
> effect when installing something, they are not different.  When they
> appear out of nothing, delayed, from a background process, they are
> different because the user not necessarily knows that they are related
> to the installation.

They don't appear out of nothing, they appear because the session
loaded some Lisp.  See my other message.

I suspect this is just something we need to get used to, that's all.
It isn't different in principle from what can happen when you just
load a bunch of Lisp into a running session.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  8:16           ` Andreas Schwab
@ 2021-12-08 13:21             ` Eli Zaretskii
  2021-12-09  0:29               ` Michael Heerdegen
  0 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-08 13:21 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: michael_heerdegen, emacs-devel

> From: Andreas Schwab <schwab@linux-m68k.org>
> Cc: Michael Heerdegen <michael_heerdegen@web.de>,  emacs-devel@gnu.org
> Date: Wed, 08 Dec 2021 09:16:46 +0100
> 
> On Dez 07 2021, Eli Zaretskii wrote:
> 
> > You get additional warnings because each of the *.el files is compiled
> > in a separate Emacs process, which starts from a clean state.  By
> > contrast, it may be the case that your code says something like
> >
> >   (require 'foo)
> >   ....
> >   (require 'bar)
> >
> > and 'bar' uses some stuff in 'foo' under the assumption that 'foo' is
> > always loaded before 'bar'.  Since native-compilation will compile
> > 'foo' and 'bar' separately, it will emit warnings.
> 
> This is in no way dependent on native compilation, though.

Not directly, no.  But in most cases, if you byte-compile or load a
file that has these two require's, the require'd files will not be
compiled, definitely not in separate sessions.  Whereas with JIT
native-compilation, both of these do happen.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:40           ` Po Lu
  2021-12-08  3:39             ` Michael Heerdegen
@ 2021-12-08 13:52             ` Stefan Monnier
  2021-12-08 14:31               ` Eli Zaretskii
  1 sibling, 1 reply; 91+ messages in thread
From: Stefan Monnier @ 2021-12-08 13:52 UTC (permalink / raw)
  To: Po Lu; +Cc: Michael Heerdegen, Eli Zaretskii, emacs-devel

> But how are those warnings different from what the user will get if he
> runs `package-install' on a package that causes warnings from the
> byte-compiler?

- By default, package-install compiles all the new files, one after the
  other, in the current Emacs session.  So it tends to emit fewer
  warnings than the native compilation (which compiles each file in
  a fresh new process) because many more packages have already been
  loaded.  This same difference can cause the native-compiled files to
  be miscompiled (because of a lack of `require`s) while the .elc files
  generated during `package-install` work properly.

- Native compilation of a package kicks in when a package that has been
  byte-compiled gets loaded in an Emacs session.
  So the warnings emitted by native-compilation are always *in addition*
  to the warnings that were emitted during `package-install`.

- `.eln` files are specific to a particular Emacs executable, so all the
  `.elc` files you use will be *re*compiled to `.eln` every time you
  start using a new Emacs executable.  For "normal" users this means
  every time they upgrade to a new release.  For people who track
  `master` it can mean "every other day".


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08 13:52             ` Stefan Monnier
@ 2021-12-08 14:31               ` Eli Zaretskii
  2021-12-09  7:19                 ` Óscar Fuentes
  0 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-08 14:31 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: luangruo, michael_heerdegen, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Michael Heerdegen <michael_heerdegen@web.de>,  Eli Zaretskii
>  <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Wed, 08 Dec 2021 08:52:01 -0500
> 
> > But how are those warnings different from what the user will get if he
> > runs `package-install' on a package that causes warnings from the
> > byte-compiler?
> 
> - By default, package-install compiles all the new files, one after the
>   other, in the current Emacs session.  So it tends to emit fewer
>   warnings than the native compilation (which compiles each file in
>   a fresh new process) because many more packages have already been
>   loaded.  This same difference can cause the native-compiled files to
>   be miscompiled (because of a lack of `require`s) while the .elc files
>   generated during `package-install` work properly.
> 
> - Native compilation of a package kicks in when a package that has been
>   byte-compiled gets loaded in an Emacs session.
>   So the warnings emitted by native-compilation are always *in addition*
>   to the warnings that were emitted during `package-install`.
> 
> - `.eln` files are specific to a particular Emacs executable, so all the
>   `.elc` files you use will be *re*compiled to `.eln` every time you
>   start using a new Emacs executable.  For "normal" users this means
>   every time they upgrade to a new release.  For people who track
>   `master` it can mean "every other day".

There's no argument that there are more warnings with
native-compilation.  The argument is whether these warnings should
surprise people as something that "never happens otherwise".



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  3:39             ` Michael Heerdegen
  2021-12-08 12:55               ` Eli Zaretskii
@ 2021-12-08 17:08               ` T.V Raman
  1 sibling, 0 replies; 91+ messages in thread
From: T.V Raman @ 2021-12-08 17:08 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=gb18030, Size: 1551 bytes --]

Michael Heerdegen <michael_heerdegen@web.de> writes:


Note also that there isn't a 1:1 correspondence between bytecomp
warnings, ie when going from el->elc vs native comp ie when going  from
el->eln.

To ensure equivalence  I believe we need to go from elc->eln.

The emacs dev contract (implicit) has always been el->elc and developers
 should feel responsible for fixing el->elc warnings. But given the
 large number of already launched packages, changing that contract now
 to say developers should fix el->eln warnings is unlikely to succeed
 in the large.

> Po Lu <luangruo@yahoo.com> writes:
>
>> But how are those warnings different from what the user will get if he
>> runs `package-install' on a package that causes warnings from the
>> byte-compiler?
>
> Depends on when these warnings appear.  When they appear as normal side
> effect when installing something, they are not different.  When they
> appear out of nothing, delayed, from a background process, they are
> different because the user not necessarily knows that they are related
> to the installation.
>
> Most packages installed here were installed before turning native comp
> on.  Maybe the experience is different when installing stuff after
> switching, I haven't checked.  But lots of regular
> (non-Emacs-developer) users will undergo the same switch some time in
> the future, with already installed packages. 
>
> Michael.
>
>

-- 

Thanks,

--Raman(I Search, I Find, I Misplace, I Research)
7©4 Id: kg:/m/0285kf1  •0Ü8



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08 13:21             ` Eli Zaretskii
@ 2021-12-09  0:29               ` Michael Heerdegen
  2021-12-09  4:49                 ` Stefan Monnier
  0 siblings, 1 reply; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-09  0:29 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> > This is in no way dependent on native compilation, though.
>
> Not directly, no.

BTW, the culmination of the problem is my init file.  It is always
loaded when I compile it, naturally, and it's very large, so a large
amount of the warnings is from compiling it.  The kinds of those
warnings are more of the type 'macro or variable used before defining
it' instead of dependency problems.  They are valid, but without native
compilation they would not be relevant in this case.

The other side of the coin is that I change my init file nearly every
day, often multiple times a day, so I get these warnings anew
frequently.  Without wanting to judge all of that, I guess it's just
expected.

Michael.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08 12:51           ` Eli Zaretskii
@ 2021-12-09  0:44             ` Michael Heerdegen
  0 siblings, 0 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-09  0:44 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> The JIT compilation doesn't just happen randomly because Emacs decides
> it's an opportune moment for it.  It happens because the session loads
> some Lisp file.  A live Emacs session used for real-life work will
> always load Lisp files, as needed.  Loading a Lisp file (via 'load' or
> 'require' or any similar API) could potentially pop up warnings and
> errors without any relation to native compilation, because something
> went wrong while loading.  I presume you won't argue for shutting up
> such messages caused by some problems in the load process or in the
> interaction of the loaded code with what you already have in the
> session, would you?  Then how are the warnings triggered by JIT
> compilation different, in principle?  They are the same phenomenon:
> Emacs loaded some Lisp package because some command needed it, and
> loading it caused warnings due to issues with the loaded code.

Lars found already better words for this.  The main problem is that it
happens while loading.  Some day when native compilation is normal like
byte compilation, the problem might not be as bad.  But currently most
packages available have not been optimized for native compilation.  A
lot will never be fixed because they are abandoned.  So a lot of
warnings will always be there, but the packages still do work, and the
user can do nothing about the warnings.  And: package maintainers often
don't care about warnings at all, we see that today with byte
compilation.  Summary: those warnings are good for developers but not
helpful otherwise.  And they annoy most people when they appear while
loading a package.

Idea: could we have a setting saying "show warnings from native
compilation only when installing something or byte compiling, but not
when recompiling (natively) because the Emacs binary has changed"?  That
would still show all warnings once, but would not get in the way when
trying to work.  That could be default.  Developers could still say
"show those warnings always".

Michael.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  9:55             ` Robert Pluim
@ 2021-12-09  0:56               ` Michael Heerdegen
  0 siblings, 0 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-09  0:56 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Eli Zaretskii, emacs-devel

Robert Pluim <rpluim@gmail.com> writes:

> Please check the latest version of the emacs lisp manual in emacs-28.

Thanks - looks good to me.

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08  2:25         ` Michael Heerdegen
  2021-12-08  2:40           ` Po Lu
  2021-12-08 12:51           ` Eli Zaretskii
@ 2021-12-09  4:13           ` Richard Stallman
  2021-12-09  9:27             ` Eli Zaretskii
  2 siblings, 1 reply; 91+ messages in thread
From: Richard Stallman @ 2021-12-09  4:13 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: eliz, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

The presence of libgccjit should not be taken as an indicator of what
a given user wants.  There may be distros (now or in the future) which
install that by default, figuring that it is helpful.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09  0:29               ` Michael Heerdegen
@ 2021-12-09  4:49                 ` Stefan Monnier
  2021-12-09  5:27                   ` Michael Heerdegen
  0 siblings, 1 reply; 91+ messages in thread
From: Stefan Monnier @ 2021-12-09  4:49 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

> amount of the warnings is from compiling it.  The kinds of those
> warnings are more of the type 'macro or variable used before defining
> it' instead of dependency problems.

Such warnings usually imply real errors (the resulting file will not
work properly because it contains code that "calls" a macro as if it
were a function (i.e. after have evaluated the arguments)).


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09  4:49                 ` Stefan Monnier
@ 2021-12-09  5:27                   ` Michael Heerdegen
  2021-12-09 10:22                     ` Andrea Corallo
  2021-12-09 13:14                     ` Stefan Monnier
  0 siblings, 2 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-09  5:27 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Such warnings usually imply real errors (the resulting file will not
> work properly because it contains code that "calls" a macro as if it
> were a function (i.e. after have evaluated the arguments)).

Usually yes, but not for my init file because it is always loaded when I
compile it.  And the same code also works interpreted.  And because of
all the dependencies of my init file I never came into the embarrassment
to compile it "in a clean environment".  So these issues are hard to
detect (in this special case) and never had consequences - until now
(where those real errors got real real errors).

Michael.




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-08 14:31               ` Eli Zaretskii
@ 2021-12-09  7:19                 ` Óscar Fuentes
  0 siblings, 0 replies; 91+ messages in thread
From: Óscar Fuentes @ 2021-12-09  7:19 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Stefan Monnier <monnier@iro.umontreal.ca>
>> Cc: Michael Heerdegen <michael_heerdegen@web.de>,  Eli Zaretskii
>>  <eliz@gnu.org>,  emacs-devel@gnu.org
>> Date: Wed, 08 Dec 2021 08:52:01 -0500
>> 
>> > But how are those warnings different from what the user will get if he
>> > runs `package-install' on a package that causes warnings from the
>> > byte-compiler?
>> 
>> - By default, package-install compiles all the new files, one after the
>>   other, in the current Emacs session.  So it tends to emit fewer
>>   warnings than the native compilation (which compiles each file in
>>   a fresh new process) because many more packages have already been
>>   loaded.  This same difference can cause the native-compiled files to
>>   be miscompiled (because of a lack of `require`s) while the .elc files
>>   generated during `package-install` work properly.
>> 
>> - Native compilation of a package kicks in when a package that has been
>>   byte-compiled gets loaded in an Emacs session.
>>   So the warnings emitted by native-compilation are always *in addition*
>>   to the warnings that were emitted during `package-install`.
>> 
>> - `.eln` files are specific to a particular Emacs executable, so all the
>>   `.elc` files you use will be *re*compiled to `.eln` every time you
>>   start using a new Emacs executable.  For "normal" users this means
>>   every time they upgrade to a new release.  For people who track
>>   `master` it can mean "every other day".
>
> There's no argument that there are more warnings with
> native-compilation.  The argument is whether these warnings should
> surprise people as something that "never happens otherwise".

What is surprising about the warnings emitted by native-compilation is
that you are doing your work and suddenly a window appears from nowhere
breaking your window layout, distracting you, spilling text you don't
understand and, in any case, are uninsterested on because you have other
work to do. So you bury or kill the buffer, fix your window layout, go
back to work and a while later the damn thing pops up again.

That is incredibly user-hostile.

Now I have

(setq native-comp-async-report-warnings-errors nil)

So much for causing pain to users as a means for improving things.





^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09  4:13           ` Richard Stallman
@ 2021-12-09  9:27             ` Eli Zaretskii
  0 siblings, 0 replies; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-09  9:27 UTC (permalink / raw)
  To: rms; +Cc: michael_heerdegen, emacs-devel

> From: Richard Stallman <rms@gnu.org>
> Cc: eliz@gnu.org, emacs-devel@gnu.org
> Date: Wed, 08 Dec 2021 23:13:08 -0500
> 
> The presence of libgccjit should not be taken as an indicator of what
> a given user wants.  There may be distros (now or in the future) which
> install that by default, figuring that it is helpful.

How is this different from any other optional library Emacs can use if
it's present.  Most of them are in the same class: if it is present,
and the user didn't explicitly say "don't build with it", we build
with it.  (libgccjit is not yet in that class, as we didn't yet decide
to build with it by default; but we may decide that in the future.)



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09  5:27                   ` Michael Heerdegen
@ 2021-12-09 10:22                     ` Andrea Corallo
  2021-12-09 13:14                     ` Stefan Monnier
  1 sibling, 0 replies; 91+ messages in thread
From: Andrea Corallo @ 2021-12-09 10:22 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>> Such warnings usually imply real errors (the resulting file will not
>> work properly because it contains code that "calls" a macro as if it
>> were a function (i.e. after have evaluated the arguments)).
>
> Usually yes, but not for my init file because it is always loaded when I
> compile it.

If you have a specific build sequence that needs to be performed in
other to byte-compile a compilation unit, either you disable native
compilation on this file with the `no-native-compile' cookie, or either
you have to perform the same compilation sequence for native
compilation.

We have synchronous entry points for native compilation that allow you
to load a file and then native compile it (as you do for byte
compilation).

  Andrea



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09  5:27                   ` Michael Heerdegen
  2021-12-09 10:22                     ` Andrea Corallo
@ 2021-12-09 13:14                     ` Stefan Monnier
  2021-12-09 22:28                       ` Michael Heerdegen
  1 sibling, 1 reply; 91+ messages in thread
From: Stefan Monnier @ 2021-12-09 13:14 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: emacs-devel

Michael Heerdegen [2021-12-09 06:27:15] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Such warnings usually imply real errors (the resulting file will not
>> work properly because it contains code that "calls" a macro as if it
>> were a function (i.e. after have evaluated the arguments)).
> Usually yes, but not for my init file because it is always loaded when I
> compile it.

I wouldn't be so sure: if you see the warning, it normally means
that the file *has been* miscompiled (not "might be").
If the file had been loaded in the Emacs instance that compiled the
file, then you wouldn't have had such a warning.


        Stefan




^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-05  5:54                         ` Tim Cross
                                             ` (3 preceding siblings ...)
  2021-12-07  0:34                           ` João Pedro de Amorim Paula
@ 2021-12-09 17:00                           ` David Koppelman
  4 siblings, 0 replies; 91+ messages in thread
From: David Koppelman @ 2021-12-09 17:00 UTC (permalink / raw)
  To: emacs-devel

> Does it actually give that much of a performance boost?

Native compilation makes a big difference in Gnus. I use Gnus as a mail
reader and its sluggishness was a long time irritant. No more.


Tim Cross <theophilusx@gmail.com> writes:

> Lars Ingebrigtsen <larsi@gnus.org> writes:
>
>> Po Lu <luangruo@yahoo.com> writes:
>>
>>>> Most distributions will probably release Emacs 28.1 with native
>>>> compilation switched on.
>>>
>>> Why is that so?  Most distributions only build their Emacs packages with
>>> the default options.
>>
>> Several distributions have signalled that they want to ship Emacs with
>> native compilation switched on (and at least one said they're going to
>> be doing a full ahead-of-time build, if I remember correctly) --
>> presumably because that'll give their users a faster Emacs.
>
> Does it actually give that much of a performance boost? It has been a
> couple of months since I tried native compilation in Emacs 28, but when
> I did, I noticed next to no performance improvement at all. In fact, all
> I did notice was lots of warnings and significant delays whenever I
> updated packages.
>
> I stopped using it partly because of all the warnings and delays when
> updating packages, but mainly because I seemed to run into a number of
> issues with org mode (most of which I think have now been addressed).
> I've actually never noticed any speed problems with Emacs. Where there
> are delays, it is due to the synchronous nature of what I'm doing rather
> than basic performance. Besides, the slowest component in my environment
> is the old bit of slow carbon using the keyboard :-)



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09 13:14                     ` Stefan Monnier
@ 2021-12-09 22:28                       ` Michael Heerdegen
  2021-12-09 22:50                         ` Michael Heerdegen
  0 siblings, 1 reply; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-09 22:28 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I wouldn't be so sure: if you see the warning, it normally means
> that the file *has been* miscompiled (not "might be").
> If the file had been loaded in the Emacs instance that compiled the
> file, then you wouldn't have had such a warning.

Sure, it miscompiles - but it also fails, and a broken eln is never
loaded.  Only because of that it "works".

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09 22:28                       ` Michael Heerdegen
@ 2021-12-09 22:50                         ` Michael Heerdegen
  2021-12-10  8:06                           ` Eli Zaretskii
  0 siblings, 1 reply; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-09 22:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Sure, it miscompiles - but it also fails, and a broken eln is never
> loaded.  Only because of that it "works".

What I really wanted to do is to point to the fact that the init file is
a special case.  Will all users be able to fix the warnings so that they
don't get a broken .eln init file?  Will all of them understand what the
problem is - when loading the source works without problems?  Compiled
stuff behaving differently than interpreted code is something that some
people don't expect and understand.

To some degree this is already the case for byte compilation, but users
do that explicitly, or they don't.  I think a significant amount of
Emacs users will have problems fixing the warnings.  We should either
not silently eln compile the users' private files, or find some other
solution, because else we will get a big problem, in my opinion, in the
future: not only complaints, but the barrier for using Emacs would get
higher.  Only programmers would be able to use an Emacs init file.  May
sound funny, but this is not the case today, lot's of people just copy
and paste snippets they find somewhere.  Lot's of people have started
with Emacs exactly this way.

I think eln compiling the user's own files should be opt-in.

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-09 22:50                         ` Michael Heerdegen
@ 2021-12-10  8:06                           ` Eli Zaretskii
  2021-12-11  3:11                             ` Michael Heerdegen
  0 siblings, 1 reply; 91+ messages in thread
From: Eli Zaretskii @ 2021-12-10  8:06 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: monnier, emacs-devel

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Date: Thu, 09 Dec 2021 23:50:55 +0100
> Cc: emacs-devel@gnu.org
> 
> Michael Heerdegen <michael_heerdegen@web.de> writes:
> 
> > Sure, it miscompiles - but it also fails, and a broken eln is never
> > loaded.  Only because of that it "works".
> 
> What I really wanted to do is to point to the fact that the init file is
> a special case.  Will all users be able to fix the warnings so that they
> don't get a broken .eln init file?  Will all of them understand what the
> problem is - when loading the source works without problems?  Compiled
> stuff behaving differently than interpreted code is something that some
> people don't expect and understand.

These questions are supposed to be answered by collecting user
experience and bug reports for Emacs 28.  We don't have that yet, so
we don't know the answers yet.  We still don't know enough about the
various consequences of this new feature in all the different use
patterns out there.

We do know that if your init file is called ".emacs" or "init.el", and
there's no corresponding .elc file, Emacs will NOT natively-compile
the init file.  So at least users who don't byte-compile their init
files are okay (I'm squarely in that group).

> Only programmers would be able to use an Emacs init file.

See above: this is at least inaccurate, if not incorrect.

> I think eln compiling the user's own files should be opt-in.

We will decide on that after we see how the community reacts to the
feature.  For now, I didn't see too many complaints about this on
relevant forums, and a few questions regarding the warnings, when
answered, were met with understanding and "problem solved"
conclusions.  But the jury is still out on these issues, from my POV,
so we will need to revisit these issues later.



^ permalink raw reply	[flat|nested] 91+ messages in thread

* Re: Enabling native compilation by default when libgccjit is present
  2021-12-10  8:06                           ` Eli Zaretskii
@ 2021-12-11  3:11                             ` Michael Heerdegen
  0 siblings, 0 replies; 91+ messages in thread
From: Michael Heerdegen @ 2021-12-11  3:11 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> We do know that if your init file is called ".emacs" or "init.el", and
> there's no corresponding .elc file, Emacs will NOT natively-compile
> the init file.

This is good (still a bit concerned about users who split their init
file into multiple separate files though).

Michael.



^ permalink raw reply	[flat|nested] 91+ messages in thread

end of thread, other threads:[~2021-12-11  3:11 UTC | newest]

Thread overview: 91+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-02 19:25 Enabling native compilation by default when libgccjit is present Andrea Corallo
2021-12-02 19:39 ` Eli Zaretskii
2021-12-03 16:52   ` Lars Ingebrigtsen
2021-12-03 18:30     ` Eli Zaretskii
2021-12-03 21:27       ` Lars Ingebrigtsen
2021-12-03 18:53     ` Stefan Kangas
2021-12-03 21:30       ` Lars Ingebrigtsen
2021-12-03 22:39         ` Stefan Kangas
2021-12-04  2:48           ` Lars Ingebrigtsen
2021-12-04  7:48             ` Eli Zaretskii
2021-12-04 19:28             ` Andrea Corallo
2021-12-04 19:41               ` Lars Ingebrigtsen
2021-12-04 19:57                 ` Andrea Corallo
2021-12-05  5:04                 ` Richard Stallman
2021-12-05  5:09                   ` Lars Ingebrigtsen
2021-12-05  5:29                     ` Po Lu
2021-12-05  5:31                       ` Lars Ingebrigtsen
2021-12-05  5:46                         ` Po Lu
2021-12-05  5:48                           ` Lars Ingebrigtsen
2021-12-05  6:00                             ` Po Lu
2021-12-05  5:54                         ` Tim Cross
2021-12-05  8:20                           ` Eli Zaretskii
2021-12-05 11:27                           ` Stefan Kangas
2021-12-05 14:15                           ` Jose A. Ortega Ruiz
2021-12-05 16:52                             ` Arthur Miller
2021-12-05 17:42                               ` Jose A. Ortega Ruiz
2021-12-05 20:48                                 ` Arthur Miller
2021-12-05 17:10                             ` Óscar Fuentes
2021-12-05 19:25                               ` Jose A. Ortega Ruiz
2021-12-05 20:55                                 ` Óscar Fuentes
2021-12-05 22:59                                   ` Stefan Monnier
2021-12-05 19:40                               ` Lars Ingebrigtsen
2021-12-05 20:02                                 ` Eli Zaretskii
2021-12-05 20:32                                   ` Lars Ingebrigtsen
2021-12-05 23:03                                     ` Stefan Monnier
2021-12-05 23:05                                       ` Lars Ingebrigtsen
2021-12-05 23:27                                         ` Stefan Monnier
2021-12-05 20:37                                 ` Óscar Fuentes
2021-12-05 21:44                                 ` Arthur Miller
2021-12-05 21:48                                   ` Lars Ingebrigtsen
2021-12-05 22:58                                     ` Arthur Miller
2021-12-05 21:15                               ` Arthur Miller
2021-12-06  4:33                               ` Richard Stallman
2021-12-06 12:59                                 ` Eli Zaretskii
2021-12-06 13:57                                   ` Stefan Monnier
2021-12-06 14:08                                     ` Eli Zaretskii
2021-12-07 16:02                                       ` Matt Armstrong
2021-12-07 16:55                                         ` tomas
2021-12-07 17:02                                         ` T.V Raman
2021-12-05 20:00                             ` Jim Myhrberg
2021-12-06  1:03                               ` Dmitry Gutov
2021-12-06  2:50                                 ` Jim Myhrberg
2021-12-06 12:59                                   ` Dmitry Gutov
2021-12-07  0:34                           ` João Pedro de Amorim Paula
2021-12-08  4:34                             ` Richard Stallman
2021-12-09 17:00                           ` David Koppelman
2021-12-06  4:33                     ` Richard Stallman
2021-12-03 22:34 ` Michael Heerdegen
2021-12-04  7:26   ` Eli Zaretskii
2021-12-07  4:38     ` Michael Heerdegen
2021-12-07  5:02       ` Michael Heerdegen
2021-12-07 13:59         ` Eli Zaretskii
2021-12-08  2:31           ` Michael Heerdegen
2021-12-08  9:55             ` Robert Pluim
2021-12-09  0:56               ` Michael Heerdegen
2021-12-08 12:52             ` Eli Zaretskii
2021-12-08  8:16           ` Andreas Schwab
2021-12-08 13:21             ` Eli Zaretskii
2021-12-09  0:29               ` Michael Heerdegen
2021-12-09  4:49                 ` Stefan Monnier
2021-12-09  5:27                   ` Michael Heerdegen
2021-12-09 10:22                     ` Andrea Corallo
2021-12-09 13:14                     ` Stefan Monnier
2021-12-09 22:28                       ` Michael Heerdegen
2021-12-09 22:50                         ` Michael Heerdegen
2021-12-10  8:06                           ` Eli Zaretskii
2021-12-11  3:11                             ` Michael Heerdegen
2021-12-07 13:53       ` Eli Zaretskii
2021-12-08  2:25         ` Michael Heerdegen
2021-12-08  2:40           ` Po Lu
2021-12-08  3:39             ` Michael Heerdegen
2021-12-08 12:55               ` Eli Zaretskii
2021-12-08 17:08               ` T.V Raman
2021-12-08 13:52             ` Stefan Monnier
2021-12-08 14:31               ` Eli Zaretskii
2021-12-09  7:19                 ` Óscar Fuentes
2021-12-08 12:51           ` Eli Zaretskii
2021-12-09  0:44             ` Michael Heerdegen
2021-12-09  4:13           ` Richard Stallman
2021-12-09  9:27             ` Eli Zaretskii
  -- strict thread matches above, loose matches on Subject: below --
2021-12-05 17:24 Angelo Graziosi

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).