native Emacs Lisp


#1

http://akrl.sdf.org/gccemacs.html


#2

不都是gcc编译的吗,恕我没看懂,不闲麻烦介绍下


#3

在SDF上还能遇到Emacs大牛 厉害 :smiling_face_with_three_hearts:


#4

这个是把el文件编译成linux的elf 二进制格式代码.

| name                  | byte-code | native-bench | native-all | native-all vs. |
|-----------------------|-----------|--------------|------------|----------------|
|                       | (sec)     | (sec)        | (sec)      | byte-code      |
| bubble                | 30.44     | 6.54         | 6.29       | 4.8x           |
| bubble-no-cons        | 42.42     | 10.22        | 10.20      | 4.2x           |
| fibn                  | 39.36     | 16.96        | 16.98      | 2.3x           |
| fibn-rec              | 20.64     | 8.06         | 7.99       | 2.6x           |
| fibn-tc               | 19.43     | 6.33         | 6.89       | 2.8x           |
| inclist-tc            | 20.43     | 2.16         | 2.18       | 9.4x           |
| listlen-tc            | 17.66     | 0.66         | 0.70       | 25.2x          |
| inclist-no-type-hints | 45.57     | 5.60         | 5.81       | 7.8x           |
| inclist-type-hints    | 45.89     | 3.67         | 3.70       | 12.4x          |
| nbody                 | 112.99    | 23.65        | 24.44      | 4.6x           |
| dhrystone             | 112.40    | 64.67        | 47.12      | 2.4x           |
| tot                   | 507.23    | 148.52       | 132.3      | 3.8x           |


#5

emacs-devel火热讨论中

这个就是把Emacs Lisp编译成直接跑的机器码。现在Emacs Lisp是编译成byte code用解释器跑。


gccemacs
#6

感觉超cool啊,希望不要突然暴毙。。


#7

archlinux上有这个包,希望能发展起来吧,还有就是希望gcc版本兼容性能有所改善。


#8

有人知道这个编译错误怎么处理吗?

/usr/lib/gcc/x86_64-linux-gnu/9/libgccjit.so: undefined reference to `lang_register_spec_functions()'  

#9

这个测试的什么?我只看懂了时间


#10

字节码 二进制测试用例 全部二进制


#11

我想问的是左边第一列都测试是啥项目


#12

冒泡,菲波那切等经典考验cpu的算法...


#13

不过我好奇的是性能才提高几倍啊,什么时候 Windows、mscOS 一起支持了,把默认库都编译成 native 的,性能应该会好上不少。第三方包如果要编译估计要麻烦些,时间估计要长一些,如果集成进 Emacs 就好了。


#14

你一说就明白了,文化低哈哈


#15

不知道有这个功能以后是不是就不用dump了w w w


#16

对啊,比 dump 方案感觉优雅很多,dump方案改一下要全部 dump,好麻烦。


#17

这个改了一个库,其他库依赖这个库的macro or inline function的话,那些库也要重新编译啊。如果编译时间太长,那就不可忍受了

另外dump本质还只是改善了加载速度而已,执行速度没变


#18

编译速度确实是个问题,所以我认为内置的库可以预编译一起发布,就跟 dump 差不多了。启动和运行速度都会有提升,第三方包安装可能要分情况。


#19

讨论其实并没有很火热。

另外,Emacs 27.1 代码开始要冻结了: https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg00970.html


#20

其实byte-compiler也有改进空间

浅析Elisp中的compiler macro

Elisp的byte-compiler居然是用elisp写的,一共是

  • bytecomp.el 编译器,不解释,除了编译,还要处理byte-run.el里的如with-no-warnings的compiler intrinsics
  • byte-opt.el naive优化器,做一些简单的优化。比如对于pure function,如果参数全部是常量,那么这个函数会在编译期计算好。
  • cconv.el 闭包转换器,其实也会做一点优化,比如闭包不用跨函数传递的就直接用lambda lifting,而不用capture。
  • macroexp.el 宏展开器,主要是macroexpand-all,此外还提供一些编写宏相关的辅助功能,常用的大概有macroexp-let2