[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:00528] スピード狂への道



mhc を高速化するべく小細工を始めました。

Emacs-Lisp でコードを書いていると、構造体があったらもっと素直に書ける
のになあ、と思うことがしょっちゅうあります。mhc では、構造体もどきを 
alist と関数で実現されていますが、これを高速化するべく、ベクタとマクロ
で実現してみました。

Attachment: mhc-speed.diff.gz
Description: Binary data

ただし、いくつかの問題があります。

まず、マクロで実現していますから、byte-compile しないと本当には速くな
りません。

それから、これが大問題なのですが、mhc で時間が係っている主要な部分は、
構造体の操作ではなく、データの操作の部分なので、こんなことをしても苦労
のわりに大して速くならない。

‥‥‥。じゃあ、なんでこんなことをしたんだと言われると、困ってしまうの
ですが。

現状の mhc のコードを高速化するためには、アルゴリズム、特にどのスケジュー
ルがどの日付に対応しているかをチェックする部分を高速化する必要がありま
す。そして、そのためには、構造体を簡単に使えるようにすることが必要じゃ
ないかな、とコードを見ていて考えました。

つまり、高速化改造のための、その前段階だと思ってください。まだ、デバッ
グも不十分なので、このパッチをあてるとバグが(多分)増えます。

コードについての意見をお願いします。


# 乃村さんへの伝言
#
# この実装では、mhc-sch-set-* はオブジェクトを返すのではなく、代入され
# た値を返すようになっています。
#     例: (mhc-sch-set-subject sch "foo") -> "foo"
#
# mhc-sch-* を使うときは、対象のオブジェクトが nil だと 
# wrong-type-argument になります。

-- 
土屋 雅稔  ( TSUCHIYA Masatoshi )
    http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/