在emacs中使用autoload卸载定义的目的是什么?为什么自动加载速度慢?

在emacs中使用autoload卸载定义的目的是什么?为什么自动加载速度慢?,emacs,elisp,Emacs,Elisp,在ELisp中,您可以使用自动加载cookie跳过对定义的求值。定义仅在使用后进行评估 ;; File foo.el ;;;###autoload (defun foo () "Doc" 42) (defun bar () "Doc" 43) 所以,如果我理解正确的话,自动加载功能是一种更快加载文件的技巧。但是当我加载foo.el时,为了跳过foo的定义,解释器仍然必须读取整个表单。我不明白为什么它更快。你从哪里得到这种“理解”的?当然不是 自动加载cookie用于提取单独

在ELisp中,您可以使用自动加载cookie跳过对定义的求值。定义仅在使用后进行评估

;; File foo.el

;;;###autoload
(defun foo ()
  "Doc"
  42)

(defun bar ()
  "Doc"
  43)
所以,如果我理解正确的话,自动加载功能是一种更快加载文件的技巧。但是当我加载
foo.el
时,为了跳过foo的定义,解释器仍然必须读取整个表单。我不明白为什么它更快。

你从哪里得到这种“理解”的?当然不是

自动加载cookie用于提取单独自动加载文件中的骨架函数/变量定义。这通常在编译时完成

如果不经过编译步骤,自动加载cookies就没有任何效果。

你从哪里得到这种“理解”的?当然不是

自动加载cookie用于提取单独自动加载文件中的骨架函数/变量定义。这通常在编译时完成


如果不经过编译步骤,自动加载cookie将无效。

自动加载表单必须单独加载。它们可以从自动加载的cookie生成,但您也可以手动写入它们。例如,在.emacs中,您可以为仅偶尔使用的函数放置自动加载表单,因此它们只能按需加载

例如:

(autoload 'ahk-mode "ahk-mode")

自动加载表单必须单独加载。它们可以从自动加载的cookie生成,但您也可以手动写入它们。例如,在.emacs中,您可以为仅偶尔使用的函数放置自动加载表单,因此它们只能按需加载

例如:

(autoload 'ahk-mode "ahk-mode")

加载文件
foo.el
内容的最简单方法是执行
load
。 但是,这是昂贵的,因为您必须读取整个文件

使用
autoload
可以告诉emacs:“函数
foo
在文件
foo.el
中定义”。 这样emacs就不会读取文件,您也不必支付加载费用。当您第一次使用函数
foo
时,emacs将通过阅读
foo.el
为您找到定义

###“自动加载”
文件中的注释本身不会对“自动加载”执行任何操作。 您需要使用一个程序来获取所有这些定义,并将它们放入文件
foo autoloads.el
(或任何其他名称)中。 对于每个函数,它将放一行,告诉emacs哪个文件包含它。 然后在
.emacs
中,您将
加载
foo autoloads.el
而不是
foo.el
。 当您第一次使用函数
foo
时,emacs将读取
foo.el


注意:
require
也可以用来代替上面解释中的
load

加载文件
foo.el
内容的最简单方法是执行
load
。 但是,这是昂贵的,因为您必须读取整个文件

使用
autoload
可以告诉emacs:“函数
foo
在文件
foo.el
中定义”。 这样emacs就不会读取文件,您也不必支付加载费用。当您第一次使用函数
foo
时,emacs将通过阅读
foo.el
为您找到定义

###“自动加载”
文件中的注释本身不会对“自动加载”执行任何操作。 您需要使用一个程序来获取所有这些定义,并将它们放入文件
foo autoloads.el
(或任何其他名称)中。 对于每个函数,它将放一行,告诉emacs哪个文件包含它。 然后在
.emacs
中,您将
加载
foo autoloads.el
而不是
foo.el
。 当您第一次使用函数
foo
时,emacs将读取
foo.el


注意:
require
也可以用来代替上面解释中的
load

这个单独的自动加载文件有什么意义?说自动加载可以加速emacs的启动。为什么?自动加载当然会加速启动,但是提供自动加载cookie与自动加载不是一回事。cookie提示外部手动启动的进程,在生成自动加载表达式文件时,它应该包括以下表单。该文件始终称为“loaddefs.el”。您可以使用
M-x find library RET loaddefs RET
检查主文件。“这个单独的自动加载文件的要点”是Emacs在调用其中一个函数之前根本不必读取包含自动加载cookie的库。因为如果自动加载在同一个文件中,那么您将一无所获,因为该文件无论如何都会加载。这就是你的问题所在。自动加载表单必须位于一个单独的文件中,因此仅加载表单(快速),并且仅当调用其中一个自动加载函数时,才会加载包含实际定义的整个文件。这个单独的自动加载文件有什么意义?说自动加载可以加速emacs的启动。为什么?自动加载当然会加速启动,但是提供自动加载cookie与自动加载不是一回事。cookie提示外部手动启动的进程,在生成自动加载表达式文件时,它应该包括以下表单。该文件始终称为“loaddefs.el”。您可以使用
M-x find library RET loaddefs RET
检查主文件。“这个单独的自动加载文件的要点”是Emacs在调用其中一个函数之前根本不必读取包含自动加载cookie的库。因为如果自动加载在同一个文件中,那么您将一无所获,因为该文件无论如何都会加载。这就是你的问题所在。自动加载表单必须位于单独的文件中,因此只有它们(快速)加载,并且整个文件包含