[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

18. バイトコンパイル (2007/12/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=byte-compile"
"MeadowMemo/バイトコンパイル"へのコメント(無し)
検索全文Elisp


Meadow などの Emacs ではいろいろな機能が emacs-lisp という言語で書かれていま す. これは人間が普通に読んだり編集することのできるファイルです.そのため,ユーザ が簡単に変更でき,一次的な設定も手軽に行うことができるという利点があります.

しかし,動作が少し遅いという欠点があります.これは, Emacs が設定ファイルを読み込 み, Emacs 内部でパソコンが理解できる形式に変換する作業を行っているためです.

そこで, バイトコンパイルという仕組みがあります. 要はコンパイルという作業をして, あらかじめパソコンが理解しやすいファイルを作っておき,速度を速くしてやろうという ものです.バイトコンパイルすると,拡張子は elc になり中を見ても読むことのできな い形式になります.

ただし, elc というバイトコンパイルされたファイルがあると, Meadow は必ず elc ファイルを読み込みます.そのため, el ファイルを変更しても,バイトコンパイル しない限り elc には反映されませんので,設定は有効にはなりません.この点には十分 注意してください.

個人の設定ファイルなどは,バイトコンパイルして体感できるほどの差を感じることはあ まりなく,上記のような副作用もあるため,バイトコンパイルしないことをお勧めします.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

18.1 バイトコンパイルの仕方 (2003/06/21)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=do%20byte-compile"
"MeadowMemo/バイトコンパイルの仕方"へのコメント(無し)
検索全文Elisp

まずは,バイトコンパイルする方法から紹介します.

ファイルを選択する方法

単純な方法は M-x byte-compile-file として, ファイルを選ぶ方法です.バイト コンパイルするファイルが少ない時に利用します.

dired からバイトコンパイルする方法

バイトコンパイルするファイルが多い時には,一個一個ファイル名を指定するなんて面倒 です.そこで, dired からバイトコンパイルする方法があります.

そのために dired でファイルを選び, B を押します.これで,バイトコンパイル できます.複数のファイルをバイトコンパイルするためには,mでファイレウにマー クをつけて,Bとするとマークをつけたファイルをすべてバイトコンパイルができ ます.

指定したディレクトリ下のファイルをバイトコンパイル

M-x byte-recompile-directory とすると,指定したディレクトリでバイ トコンパイルが必要なファイルをすべてバイトコンパイルができます.

コマンドラインからバイトコンパイル

meadow -batch -f batch-byte-compile *.el

のようにコマンドラインからバイトコンパイルすることもできます.

以下で実際に設定ファイルをバイトコンパイルして運用する方法をいくつか紹介します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

18.2 ディレクトリにまとめてバイトコンパイル (2003/08/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=byte-recompile-directory"
"MeadowMemo/ディレクトリにまとめてバイトコンパイル"へのコメント(無し)
検索全文Elisp

Emacs 標準の機能を使う方法です. 設定ファイルをいくつかに分割しておき, それを特定 のディレクトリに保存しておきます.

そして,.emacs に以下のような設定を書いておきます.

 
(byte-recompile-directory "~/mylisp/")
(load "~/mylisp/startup")

こうしておくと, 1 行目で,~/mylisp/ 下のファイルの中でバイトコンパイルが必要な ファイルがバイトコンパイルされます.そして, 2 行目のようにその設定ファイルを読 み込むように設定しておきます.

例えば ~/mylisp/startup.el に

 
(load "~/mylisp/.meadow2")
(load "~/mylisp/.font")
(load "~/mylisp/.screen")

といった風に書いておきます.

こうしておけば,必ずバイトコンパイルしてから設定ファイルを読み込むようになります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

18.3 自動バイトコンパイル (2003/08/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=my-load"
"MeadowMemo/自動バイトコンパイル"へのコメント(無し)
検索全文Elisp

これは *.el ファイルの方が新しければバイトコンパイルするための設定です. ただし, apel がないと動きません.

 
(require 'bytecomp)
(require 'path-util)
(defun load-after-bytecompile (file)
  (let ((compiled-file-name ""))
    (if (not (string-match "\\.el$" file))
        (setq file (concat file ".el")))
    (setq file (file-installed-p file))
    (setq compiled-file-name (byte-compile-dest-file file))
    (if (file-installed-p compiled-file-name)
        (if (file-newer-than-file-p compiled-file-name file)
            (load-file compiled-file-name)
          (if (byte-compile-file file t)
              ()
            (error "Can't compile"))
          )
      (if (byte-compile-file file t)
          ()
        (error "Can't compile"))
      )))

.emacs の設定を別ファイルにし,

 
(load-after-bytecompile "filename")

という風に使ってください



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

18.4 保存時にバイトコンパイル (2003/08/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=byte-compile%20after%20save"
"MeadowMemo/保存時にバイトコンパイル"へのコメント(無し)
検索全文Elisp

.emacs を保存時にバイトコンパイルする設定です. 以下を, .emacs に追加します.

 
(add-hook 'after-save-hook
          (function (lambda ()
                      (if (string= (expand-file-name "~/.emacs.el")
                                   (buffer-file-name))
                          (save-excursion
                            (byte-compile-file "~/.emacs.el"))))))

これで保存時にバイトコンパイルしてくれます.

あるいは, .emacs の最後に以下を追加しても同様のことができます.

 
;;; Local Variables: 
;;; after-save-hook: (lambda () (byte-compile-file (buffer-file-name)))
;;; End:

これを設定すると,ファイルを開く時に有効にするかどうかを確認されます.というのも, これを悪用すると,「~/」以下を消去といったことも可能だからです.

 
(setq enable-local-eval t)

とすると,聞かれることはなくなりますが,危険です.ちなみに,デフォルトは「'maybe 」です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

18.5 カレントバッファのファイルをバイトコンパイル (2003/08/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=byte-compile-this-file"
"MeadowMemo/カレントバッファのファイルをバイトコンパイル"へのコメント(無し)
検索全文Elisp

以下の設定を .emacs に追加して, M-x byte-compile-this-fileとすれば, 現在の バッファのファイルをバイトコンパイルしてくれます.

 
(defun byte-compile-this-file ()
  "Compile current-buffer-file of Lisp into a file of byte code."
  (interactive)
  (byte-compile-file buffer-file-name t))


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]