archlinux 上使用 libgccjit/pure gtk emacs,我使用 straight.el , 安装好之后打开会自动编译所有 package,除了一些 warning,启动速度慢了1到2s,性能提升很明显。
https://aur.archlinux.org/packages/emacs-pgtk-native-comp-git/
archlinux 上使用 libgccjit/pure gtk emacs,我使用 straight.el , 安装好之后打开会自动编译所有 package,除了一些 warning,启动速度慢了1到2s,性能提升很明显。
https://aur.archlinux.org/packages/emacs-pgtk-native-comp-git/
最新版不要升级,我今天升级打不开了,退回倒数第二个版本就可以了。
我的emacsclient没法将emacs呼唤到前台,不知道是不是我系统的问题
会不会是以前生成的eln-cache 导致的, 删掉后试试, 我之前遇到过一次。
我用的是最新版,没问题。应该是eln-cache的问题,需要重新编译。
请教怎么删除?
直接手工删光所有eln文件吧。
其实comp.el里面也实现了重新编译机制。可能是你配置了什么,我这里零配置,Emacs升级之后会自动重新编译。
前几天某个版本有问题,导致加载某些包会出现错误,删掉(非Emacs自带的包的)eln也没用。gdb里看了下栈回溯,我猜是优化得太激进了,没时间再进一步细看。去掉了有问题的包完事儿。
直接手工删除 ~/.emacs.d/eln-cache 目录 重启emacs 即可
我试了一下,应该不是缓存的问题。
Arch系统更新非常快,我用的 28.0.50.145529 (最新版) 就无法启动,用的上一个版本 28.0.50.145362 这个版本就可以正常运行。
我也用的这个版本,没有问题,反而是之前有几个版本用起来会崩溃(前面我发的内容)
我用了最新的pgtk-native-comp,试了好多遍,查看/proc/pid/maps发现不加载emacs/eln-cache里的eln文件,,,那效果是不是和elc是一样的,,
更新:发现要先编译成elc再编译eln,直接把el编译成eln虽然也会成功但是没有作用!! 还有发现emacs中的终端好像有时候会丢失一些输出,用外部终端可以看到的信息,emacs的终端只能看到很少一部分(vterm or ansi-term)
终端的bug你要是在Emacs develop mailing list跟作者反馈一下应该会很快修好
在这里mark一下,win10 nt-comp编译成功了,安装还是蛮简单的:
pacman -Syu
pacman -S texinfo
pacman -S mingw-w64-x86_64-libgccjit
./autogen.sh
./configure --without-dbus --without-pop --with-nativecomp --prefix=/your/path/to/emacs
@ECHO OFF
TITlE Emacs
SET HOME=yourhomepath
CD /C %HOME%
SET PATH=\your\mingw\install\path\mingw64\bin;\your\msys64\install\path\user\bin;%PATH%
\your\emacs\install\path\emacsclientw.exe -n -a \your\emacs\install\path\runemacs.exe -e "(make-frame-visible)"
就OK了 但令我疑惑不解的是:
(native--compile-async "~/.emacs.d/elpa" 4 t)
日志文件感觉全是错?
kill-emacs(-1)
debug(error (file-error "Removing old name" "Permission denied" "c:/Users/jacklisp/.emacs.d/eln-cache/28.0.50-x86_6..."))
kill-emacs(-1)
debug(error (file-error "Removing old name" "Permission denied" "c:/Users/jacklisp/.emacs.d/eln-cache/28.0.50-x86_6..."))
kill-emacs(-1)
debug(error (file-error "Removing old name" "Permission denied" "c:/Users/jacklisp/.emacs.d/eln-cache/28.0.50-x86_6..."))
kill-emacs(-1)
debug(error (file-error "Removing old name" "Permission denied" "c:/Users/jacklisp/.emacs.d/eln-cache/28.0.50-x86_6..."))
kill-emacs(-1)
debug(error (file-error "Removing old name" "Permission denied" "c:/Users/jacklisp/.emacs.d/eln-cache/28.0.50-x86_6..."))
kill-emacs(-1)
...
debug(error (file-error "Removing old name" "Permission denied" "c:/Users/jacklisp/.emacs.d/eln-cache/28.0.50-x86_6..."))
k
估计这个版本的编译模式做了修改,不需要手工调用
native--compile-async
这个命令了,emacs会根据你的使用动态的编译响应el文件,这一点可以从
*Async-native-compile-log*
这个buffer体现出来,比如当你
M-x lsp
后台就会启动编译相应的lsp-xxx.el等相关文件,感觉不错。 感觉可惜的地方有两点
1. emacs在windows 10上的闪屏问题还是存在,并没有解决
2. 不能dump启动,瞬间没爱了,我看论文是支持的,但没找到方法
搞不定这两个问题我还是去用WSL了:->
错误显示没有权限啊
windows下的一启动就编译了,编译好后再编译就显示这个错误
之前试过一次,一样的问题,但好像直接在mingw64的窗口下启动字符界面的可以完成。不过不是很确定,后来用WSL下的了。
字符界面也不行,估计是这个版本不需要手工调用
native--compile-async
命令了,启动emacs在后台会自动调用,使用到哪个el就编译哪个el,如果可以编译的话。
这一堆错误是eln-cache没法删除,为啥没权限我也没搞懂,手动把.emacs.d的eln-cache删了就好了