Re: Deferring native compilation finalization until idle
Stéphane Marks <[email protected]> Sat, 25 Jul 2026 18:04:03 +0200
| Newsgroups | gmane.emacs.devel |
|---|---|
| Message-ID | <CAN+1HboJjkvu6DUdXYMYWt4qGSDWW-TNa=zo6QzkeeparA4gQA@mail.gmail.com> |
On Sat, Jul 25, 2026 at 11:56 AM Aaron Jensen <[email protected]> wrote: > On Sat, Jul 25, 2026 at 8:39 AM, Perry Fraser <[email protected]> wrote: > >> Stéphane Marks <[email protected]> writes: >> >> I pretty much live in Emacs on macOS and this is a non-issue, IME. >> >> Are you able to reproduce the behavior I described when starting with >> an empty config and a custom eln cache path in your early-init.el? >> (I found it especially obvious when launching M-x gnus, hitting m >> to compose a message, and then typing.) >> >> I also assume you aren’t doing anything odd like running with SIP >> disabled. >> >> > What Eli said correctly describes macOS behavior and how to deal >> with it. If you use an Emacs build that follows the “rules” and is >> installed as a bundle as >> https://github.com/jimeh/emacs-builds/releases do, you should not >> see any “hangs.” A couple of days ago, I installed a new nightly >> jimeh bundle which includes prebuilt native modules and recompiled >> all external modules asynchronously just fine and with no delays. >> Restarts are nearly instantaneous. If you are not running from a >> bundle that macOS can “bless,” then you may experience delays. >> >> When launching a bundle downloaded from there by double-clicking the >> .app I still experience the same behavior when my eln cache is empty, >> as well as on my first launch without any eln cache shenanigans. >> >> > > I am also able to reproduce the issue with jimeh's build. It makes no > difference for me. The only thing I can think of is that there's a > difference in the number of packages loaded at startup time for Stéphane vs > those that observe an issue. > > After starting Emacs fresh, I end up with 509 files in my eln-cache > directory and there are significant main-thread stutters (to the point > where Emacs is unusable for the first 10's of seconds after it starts the > first time. > > I'm afraid that the notion that this is a CPU saturation problem is > demonstrably false as well. When I was originally profiling this it was > clear that it was the Emacs main thread that was being blocked while > loading the new libraries. My suggested change was to move the first load > to actually be asynchronous. This allows it to *actually* become a CPU > saturation problem if it still occurs. As is stands now, it is effectively > moving this relatively long-running, blocking task, to the Emacs main > thread. How frequently it happens depends on how quickly you compile your > eln files, meaning how many parallel instances you use. > > The Emacs main event loop is not impacted by asynchronous native >> compilations so I can't say what is preventing your Emacs from processing >> input keys. The only explanation I have is that macOS itself is doing >> precisely the thing that etc/PROBLEMS suggests a workaround for and which >> the jimeh builds use: >> >> codesign --force --sign - \ >> --entitlements macos-disable-library-validation.entitlements \ >> src/emacs >> >> Are you using that? >> > > If the Jimeh build uses this, it didn't work for me. Regardless, this is > exactly the thing that disables the security check macOS is doing. It is > certainly a "workaround". And it does, in fact, prevent the stutter. If > you're doing this (or your build is) and you're not seeing problems, that > explains it completely. It seems somewhat strange to say "I'm already doing > the workaround and I don't have the problem!", so I'm not sure exactly what > you're getting at here. Without disabling validation, this *is a main > thread problem* because the entirety of macOS compilation + validation is > *not* done asynchronously. > > This is and likely always will be a macOS problem, but I struggle to see > how it would be possible for *anyone* to not be affected without either > applying one of the workarounds (as Stéphane/jimeh is doing) or by greatly > reducing async count, which only lessens the problem, not eliminates it. > FWIW, my eln-cache this morning, starting fresh from Thursday, has 146 files with seldom used packages uncompiled, of course. Rebuilding that cache was entirely asynchronous, perhaps except for the trampolines. I have not tried setting native-comp-enable-subr-trampolines to nil in early-init.el to see if this bypasses the delays that you're seeing. Have you tried that? >