2009-09-01から1ヶ月間の記事一覧

install 駆け足版

Sabayon 試してみたけどふつーに Gentoo インストールすることにして、そのまま Sabayon の Live CD から install してみる。 てきとーな linux で起動 network 繋がる事 あとはごく基本的なコマンド使えれば何とかなる disk 準備 $ fdisk /dev/sd* (中略) $…

inline #6 一旦まとめ

lisp/evalmacs.l::defun を変更 関数定義の lambda expression を(とりあえず symbol-plist に)保存 # defun の定義が2つあるので注意 どっかで function-lambda-expression を定義 どっかで expand-inline を定義 lisp package から inline を export し…

inline #5 元の関数定義が必要な件について

関数定義は si:closure-body で取り出せて、inline でやろうとしてることはこんな感じ。 仮引数と実引数から、てきとーに束縛する let form を作って その中に関数の body を突っ込む (defun foo (&rest args) (apply #'+ args)) => foo (si:closure-body 'f…

condition 一覧

(compile (defun find-all-condition-and-slot-accessors () (do-all-symbols (sym) (let ((it (ignore-errors (make-condition sym)))) (when it (let ((def (si:*structure-definition it))) (format t "- ~S~%" (si:*structure-definition-name def)) (do…

誰だ、宝物をゴミ箱に放り込んだのは

http://xyzzy.s53.xrea.com/wiki/index.php?cmd=read&page=trash%2Fdisassemble こんなものがあったのか。なんで trash にあるんだ。全力で無視してたじゃないか。

inline #4 special-form に展開しちゃダメ?

どうも compiler::optimize-form の関数が返す form は special-form になってはいけないようだ。compile.l の関数が何やってるのかどうにもよくわからん。 macro はとにかく展開するんで、form は最終的に 関数呼び出し special-form のどっちかになるはず…

inline #3 どう展開すりゃいいんだ?

(let ((arg1 value1) (arg2 value2) ...) <body>) 機械的に展開できるのはここまでで、これ以上は手動で定義してやらにゃならんような。理想としては ;;; 関数定義 (defun ev-oddp (obj) (oddp (example-value obj))) ;;; 関数呼び出し (ev-oddp X) ;;; たぶん最も</body>…

inline #2 compiler::optimize-form

lisp/compile.l を眺めてたら (get 'compiler::optimize-form) に関数を突っ込んでおくと compile 時に inline 展開してくれるっぽいことを発見。compiler::optimize-form に突っ込む関数は 対象の を呼び出す form を受け取る その呼び出す form があったと…

inline #1 ほんとに速くなる?

結論: それなりに速くなる、と思ってよさそう。 「それなりに」というのは、今回やったのは処理自体がそんなに時間かかるものではないので関数呼び出しのオーバーヘッドが相対的に大きかったはず。つまり実際の処理がもっと時間かかるものだと関数呼び出しの…

with-slots

with-slots の完全な仕様を把握してないのでこれでいいのかわからんけど叩き台。 (require "symbol-macrolet") (defmacro with-slots ((&rest slot-entries) object &body body) `(let ((#1=#:object ,object)) (symbol-macrolet ,(mapcar (lambda (slot-ent…

applyhook を使った profiler

を作ったんだけど*1、labels に対応できない。applyhook に仕掛けた関数には、呼び出す関数とその呼び出しの引数が与えられるのだけど、呼び出す関数っつーか symbol が渡される。んで、その symbol が labels や flet で定義された lexical な関数だった場…