[ANNOUNCEMENT] emacs 28.0.50-1.6bec21243d20 (TEST)

Ken Brown via Cygwin-announce cygwin-announce@cygwin.com
Tue Sep 28 16:20:03 GMT 2021


The following packages have been uploaded to the Cygwin distribution
as test releases:

* emacs-28.0.50-1.6bec21243d20
* emacs-common-28.0.50-1.6bec21243d20
* emacs-X11-28.0.50-1.6bec21243d20
* emacs-w32-28.0.50-1.6bec21243d20
* emacs-lucid-28.0.50-1.6bec21243d20

Emacs is a powerful, customizable, self-documenting, modeless text
editor.  Emacs contains special code editing features, a scripting
language (elisp), and the capability to read mail, news, and more
without leaving the editor.

This is a *very* preliminary pretest for emacs-28.1.  The latter will
include a major new feature, native compilation (explained below).
The purpose of this test release is to help us figure out what changes
will be needed (on both the Cygwin side and the Emacs side) to make
native compilation work well on Cygwin.

The test release is not recommended for 32-bit Cygwin.  If you try it,
you will almost certainly see fork errors while running emacs.  Once
we get native compilation working well on 64-bit Cygwin, we'll see
what can be done for the 32-bit case.

If you want to try this test release, please do the following:

1. Install Achim's test release of the _autorebase package, currently
available from his personal Cygwin repo; see

   https://cygwin.com/pipermail/cygwin-apps/2021-September/041573.html

for instructions.

2. Install the gcc-core package.

3. Create a file /var/lib/rebase/userpath.d/<username> with one line,
which is the absolute path to ~/.emacs.d/eln-cache.  For example, on
my system I have:

$ cat /var/lib/rebase/userpath.d/kbrown
/home/kbrown/.emacs.d/eln-cache

If more than one user will be using Emacs on your system, create a
file like this for each user.

Here is the promised explanation of native compilation:

Many of the editing commands used in Emacs are defined in elisp
libraries (*.el files).  To make Emacs run faster, these libraries are
usually compiled to architecture-independent *.elc files, containing
"byte-code" representations of the functions in the original files.
These byte-code functions are interpreted by the Emacs "byte-code
interpreter" when they are called.

Native compilation takes this one step further by using gcc to compile
the elisp libraries to native shared libraries (like DLLs, but with an
extension .eln instead of .dll).  This results in a substantial
speed-up of Emacs.

Some of the .eln files are created at build time.  These are installed
in a subdirectory of /usr/lib/emacs/<version>/native-lisp.  Others are
created as needed and are stored by default in a subdirectory of
~/.emacs.d/eln-cache.  (You can change this default, but then you also
have to make the corresponding change to
/var/lib/rebase/userpath.d/<username>.)

Final remarks:

1. The first few time you run Emacs, it might seem slow to start.
This is because it is compiling the elisp libraries that are needed
for your init file (usually .emacs).  For the same reason, you might
see occasional pauses the first time you use a command.  But otherwise
you should see a noticeable speed-up of Emacs.

2. To prevent fork failures, the .eln files need to be rebased
occasionally, for the reasons explained here:

   https://cygwin.com/cygwin-ug-net/highlights.html#ov-hi-process-problems

This is handled by the test release of _autorebase mentioned above
every time you run setup.  But it is not currently done when new .eln
files are created.  This is mostly a problem on 32-bit Cygwin and is
not yet solved.  The main purpose of this test release of Emacs is to
find out if it is likely to be a problem in the 64-bit case.

3. Compilation is done asynchronously, with a log in a buffer called
*Async-native-compile-log*.  If you run emacs-w32 and exit while a
compilation is in progress, you might see a dialog box saying that
emacs has aborted and asking if you want to attach a debugger.  Just
say No.  If this annoys you, check the compilation buffer before
exiting, and wait for the "Compilation finished" message.

Ken Brown
Cygwin's Emacs maintainer


More information about the Cygwin mailing list