auto-async-byte-compile.elリリース - バイトコンパイル問題の終焉

自動バイトコンパイルを行う auto-async-byte-compile.el をリリースしました。以前のバージョンではRubyが必要でしたが、auto-async-byte-compile.elはEmacs Lispで完結しています。

リンク先のbyte-compileスクリプトも持っておくとコマンドラインからload-pathを気にせずにバイトコンパイルできます。

その発想はなかった! 新しい自動バイトコンパイルでEmacsを高速化する - http://rubikitch.com/に移転しましたより。

Emacs Lispをバイトコンパイルすると動作が高速化するのは常識である。しかし、バイトコンパイルには致命的な欠点があって、Lispファイルの方がバイトコンパイルファイルよりも新しい場合は、古いバイトコンパイルファイルが読み込まれてしまうのだ!!そのため、Lispファイルを更新したらバイトコンパイルしておかないといけない。
このどうしようもない仕様をなんとかするべく、自動バイトコンパイルで自衛をしている人はけっこういると思う。というか、自動バイトコンパイルがないと絶対に泥沼にはまってしまう。

自動バイトコンパイルとは、Lispファイルを保存したときに after-save-hook をつかって自動でバイトコンパイルをするというもの。しかし、これだとバイトコンパイル中は待たされてしまう。シングルスレッドの悲劇。
Emacsで同時に複数の処理を実行するには、タイマーを使うか、外部プロセスに任せるか、しかない。
バイトコンパイルコマンドラインから行うことができる。 emacs -Q -batch -f batch-byte-compile hogehoge.el って感じでbatch modeを使ってバイトコンパイルする。これを使えば、待たされることなくバイトコンパイルすることができる!!

M-x install-elisp-from-emacswiki auto-async-byte-compile.el でインストールしてください。

そして、以下のコードを.emacsに加えてください。

(require 'auto-async-byte-compile)
(setq auto-async-byte-compile-exclude-files-regexp "/junk/")
(add-hook 'emacs-lisp-mode-hook 'enable-auto-async-byte-compile-mode)

ただし、自作マクロを定義している場合は ~/.emacs.d/initfuncs.el (正確には auto-async-byte-compile-init-file で指定されたファイル)に移動しておいてください。バイトコンパイル時に必要になるからです。