【求助】emacs 29 with native-comp 无法 dump

最近升级到有 native-comp 的 emacs 29 (通过 emacs wiki 上提到的 secretsauce.net apt install 的:EmacsWiki: Emacs Snapshot And Debian)

然后尝试 dump, 未果:

emacs-snapshot --batch -Q --eval '(dump-emacs-portable "/home/rws/dump2")'

报错信息:

Dumping fingerprint: 64671aa9d5d9d7a5c4abd46fe6dc2164e9d39694fb117d13aec2653df9df9e98

Error: error ("Trying to dump non fixed-up eln file")
  debug-early-backtrace()
  debug-early(error (error "Trying to dump non fixed-up eln file"))
  dump-emacs-portable("/home/rws/dump2")
  command-line-1(("--eval" "(dump-emacs-portable \"/home/rws/dump2\")"))
  command-line()
  normal-top-level()
Trying to dump non fixed-up eln file

没有开启 native-comp 的 emacs 28 可以 dump

dumping fingerprint: c11f362dbe2f7dbede975b693434c190f444cee8b79f36cf2d2be681bf22c049
Dump complete
Byte counts: header=80 hot=7309760 discardable=124272 cold=3292232
Reloc counts: hot=397455 discardable=4777

问题

native-comp 和 dump 是可以并存的吗?我搜到的相关信息不多,两年前 bug-gnu-emacs 邮件列表上的讨论似乎显示是不行的:bug#45103: [feature/native-comp] support re-dumping support

信息

  • emacs-snapshot version: 29.0.50
  • uname -a: 6.0.0-2-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.0.5-1 (2022-10-28) x86_64 GNU/Linux

有可能是你重新编译时没 make bootstrap,导致编译出来文件对不上。

https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-08/msg01858.html

然后,其实 pdumper 在没开 native comp 情况下还有一堆奇怪问题没解决,比如 package-initialize 不起作用。

感谢,我自己也又找到了一些相关信息,似乎 pdumper 和 native comp 确实还比较难配合,那我再观望观望

感觉 native compa 越来越鸡肋了。

dump 我常用。刚开始遇到些问题,比如先前发现有的包 dump 之后会出错(例如 helm-core magit forge),load-path 也需要重新添加。不知这些问题是否依然存在。

2 个赞

native comp 之类主要是人家为了出论文做了,出了论文作者没兴趣了就只能给社区维护了。

pdumper 主要解決的是 glibc 删除 unexec 调用的问题,二次 dump 也不是作为主要特性支持的

native compile的主要作者是谁呀。 这么屌的呀。

1 个赞

同感!native comp 占去了我大量的编译时间,因为最近一年我都在用 Emacs master。编译时间换回来的性能提升不知道有多少。而且每次重新编译 Emacs 后,还得看那一堆烦人的 Warning 提示。

打算用回无 native-comp 的 Emacs 试试看了。

1 个赞

我用native-comp,但是实时编译被我禁止了。也就是说,只有内置lib是native compile的,也不用每次安装完了等。

3 个赞

不知道emacs 29里面有什么优化,我现在没有打开native comp好像速度还是比28 + native comp要快。

1 个赞

Emacs 29 更新了很多内容,但我也不知道具体是哪些更新提升了性能。
具体更新内容可以看 emacs/etc/NEWS

我注意到 make bootstrap 中有一步就是 dump

Emacs 只能正常 dump 一次,用第一次 dump 出来的 image 再 dump 就多少有点小问题

这不是emacs 28的杀手级特性吗?

用户体验不好,每次更新 emacs 和包时都要编译,且提升有限。

我看了一遍,基本上没提性能上的优化

诶, INSTALL 里面说了可以把配置放到 site-init.el 里, 在第一次就 dump 进去