0

ELisp では、autoload cookie を使用して定義の評価をスキップできます。定義は、使用されたときにのみ評価されます。

;; File foo.el

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

(defun bar ()
  "Doc"
  43)

したがって、私が正しく理解している場合、オートロード機能はファイルをより速くロードするためのハックです。しかし、ロードfoo.elすると、 foo の定義をスキップするために、インタープリターはフォーム全体を読み取る必要があります。なぜ速いのか理解できません。

4

3 に答える 3

3

ファイルのコンテンツをロードする最も簡単な方法foo.elは、load. ただし、ファイル全体を読み取る必要があるため、これにはコストがかかります。

autoloademacsに「関数fooはファイルで定義されています」と伝えることができますfoo.el。この方法では、emacs はファイルを読み取らず、読み込み料金を支払う必要はありません。関数fooを初めて使用するとき、emacs は を読み取って定義を見つけますfoo.el

ファイル内の;;;###autoloadコメントは、それ自体ではオートロードに対して何もしていません。foo-autoloads.elこれらの定義をすべて取得してファイル(または他の名前)に入れるプログラムを使用する必要があります。関数ごとに、どのファイルにそれが含まれているかを示す行が表示されます。次に、あなた.emacsload foo-autoloads.el代わりにfoo.el. foo.elfunction を初めて使用するときに、emacs によって読み取られますfoo

注:上記の説明のrequire代わりに を使用することもできます。load

于 2012-06-14T19:06:02.950 に答える
2

その「理解」はどこから得たのですか?確かにマニュアルではありません。

自動ロード Cookie は、骨格関数/変数定義を別の自動ロード ファイルに引き出すために使用されます。これは通常、コンパイル時に行われます。

そのコンパイル手順を経ないと、オートロード Cookie は効果がありません。

于 2012-06-14T13:52:27.403 に答える
1

自動ロードフォームは個別にロードする必要があります。自動ロード Cookie から生成できますが、手動で書き込むこともできます。たとえば、.emacs に、たまにしか使用しない関数の自動ロード フォームを配置して、オンデマンドでのみロードされるようにすることができます。

例えば:

(autoload 'ahk-mode "ahk-mode")
于 2012-06-14T14:03:57.237 に答える