Bringing GNU Emacs to Native Code
Emacs Lisp (Elisp) is the Lisp dialect used by the Emacs text editor family.
GNU Emacs can currently execute Elisp code either interpreted or
byte-interpreted after it has been compiled to byte-code. In this work we
discuss the implementation of an optimizing compiler approach for Elisp
targeting native code. The native compiler employs the byte-compiler's internal
representation as input and exploits libgccjit to achieve code generation using
the GNU Compiler Collection (GCC) infrastructure. Generated executables are
stored as binary files and can be loaded and unloaded dynamically. Most of the
functionality of the compiler is written in Elisp itself, including several
optimization passes, paired with a C back-end to interface with the GNU Emacs
core and libgccjit. Though still a work in progress, our implementation is able
to bootstrap a functional Emacs and compile all lexically scoped Elisp files,
including the whole GNU Emacs Lisp Package Archive (ELPA). Native-compiled
Elisp shows an increase of performance ranging from 2.3x up to 42x with respect
to the equivalent byte-code, measured over a set of small benchmarks.
Back
Read News