UP | HOME

Ping's Tech Notes

Emacs 28.1 正式发布,elisp原生编译支持来了!

Ping Zhou, 2022-04-04

期待已久的 Emacs 28.1 版本来了!这个版本中引入了一系列新特性,其中最引人注目,也最受期待的恐怕就是对Emacs Lisp(elisp)的原生编译支持(native compilation)。

目前 Emacs 28.1 还没有apk等二进制包,需要从源代码安装,方法和以前版本类似。但需要注意的是,原生elisp编译特性默认是不打开的,需要在 configure 时候加上 --with-native-compilation 参数。

另外,这个特性还依赖 libgccjitgcc-10 包,需要先安装这些依赖包,否则 --with-native-compilation 参数会被拒绝:

sudo apt install -y libgccjit0 libgccjit-10-dev gcc-10

安装完依赖包,就可以编译 Emacs 28.1 了:

export CC="gcc-10"
./autogen.sh
./configure --prefix=$HOME/local/ --with-imagemagick --with-native-compilation
make -j2
make install

安装完成!

2022-04-04_14-26-54_screenshot.png

试试看这个 native elisp compilation ,随便写个简单的 elisp 文件然后用 native-compile 函数编译:

(native-compile "serve.el")

生成的原生二进制文件会保存在 ~/.emacs.d/eln-cache/ 目录下。用 file 命令查看,可以看到它被编译成了原生的ELF文件:

file ~/.emacs.d/eln-cache/28.1-18b24ab0/serve-902d1548-7e0cb452.eln 
.../serve-902d1548-7e0cb452.eln: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=92a81b6c71e5cfee84e9763d9ac0625a0164875c, not stripped

除了原生elisp编译外,Emacs 28.1 还有很多新特性,以后有空慢慢探索。 :-)