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
参数。
另外,这个特性还依赖 libgccjit
和 gcc-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
安装完成!
试试看这个 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 还有很多新特性,以后有空慢慢探索。 :-)