【发布时间】:2015-01-14 16:39:29
【问题描述】:
我想要一个没有安装系统范围插件的 emacs 安装。 Gentoo 将它们直接安装在 lisp 目录中。所以我在我的家中创建了单独的 emacs/lisp 目录,该目录只包含来自 emacs 本身的文件。每次我运行它们都会被编译。所以我想减少运行时间并预编译这些文件。
我使用C-u 0 M-x byte-recompile-directory 来生成字节编译文件。我有 GNU Emacs 24.4.1
首先,我尝试对包含 44 个总大小为 2 Mb 的文件的子目录“lisp/calc”进行字节重新编译。 Emacs 在 100% cpu 负载下连续工作大约需要 15 分钟来对目录进行字节重新编译。我以为emacs卡在某个地方,但是当我等待的时间更长时它成功完成了任务。
现在我正在尝试对整个“lisp”目录进行字节重新编译。该过程仍在单线程中 100% 加载我的 i5 处理器。 top 实用程序显示它已经消耗了超过 38 小时的纯 cpu 时间。
字节重新编译目录需要这么多时间来处理目录是否正常?异常可能是我的特定软件版本引起的吗?有人必须在分发之前打包 emacs,他会花那么多时间编译还是袖手旁观?
更新一。
我不对编译器文件执行单独的编译。只需运行单个命令
更新二。
我已经尝试过批处理字节重新编译目录,它的运行速度与我对现代编译器的预期一样快。编译器只需要不到一分钟的时间。并且没有批处理编译过程长达10多分钟。考虑到小型和大型目录的工作时间,我建议“字节重新编译目录”具有平方或更多时间复杂度,具体取决于源大小。由于建造者采用了一些奇怪的逻辑,大部分时间都被浪费了。可能是某些文件在迭代过程中被多次访问。
更新 III
正如@phils 建议的那样,问题出在 emacs 初始化文件中。首先,我认为该案例是在尝试编译 emacs 用于运行的 lisp 文件。所以我创建了简单的 start.el 文件,将 load-path 变量重置为 lisp 目录的新副本。但事实并非如此。即使使用目标文件来运行 emacs 也能很好地完成它的工作。
这就是一些干扰编译器工作的插件。
【问题讨论】:
-
这个问题可能更适合emacs.stackexchange.com。
-
我在 google 中搜索 emacs 问题,如果经常发给我这个站点,所以我确信 emacs 标签是我需要的。主题可以转移到 emacs.stackexchange.com 吗?如果不是,创建两个主题是否合适?
-
在编译其他所有内容之前,您是否编译并重新加载了编译器?这可能会产生重大影响。
-
@ayvango,Emacs SE 站点是新的(和测试版)。一些 Emacs 问题仍然适用于此处(与编程相关的问题),但您的问题更多的是系统管理问题。
-
仅供参考,如果我强制对 calc 目录的副本进行字节编译,只需不到 10 秒。这个shell命令比你做的快吗?
touch *.el && emacs -Q -batch -eval '(batch-byte-recompile-directory 0)'