2008-10-01から1ヶ月間の記事一覧

健康診断

予想ほど悪くはない。ダイエット必須。

memo

コンパイラがこんな感じだったら入門者(わたしのような)が勉強しやすいのだけど、現実はもっと複雑だ。 (defun compile (program) (emit (optimize-3 (optimize-2 (optimize-1 program))))) 自作のコンパイラは、何か要素を見つける度に問答無用で断片をフ…

Scheme Compiler の勉強(25) - リファクタリング

小休止して、汚く冗長なコンパイラを少し整理。今までは何でも文字列で処理していたので、見た目も悪いしメンテしにくかった。instruction を定義して(まだ乱暴だけど)、以前だと (emit "~a = load i32 %ret" %tmp1) などと書いていた処理を、(assign %tmp…

SBCL memo

src/compiler/ppc/insts.lisp "instruction set definition for PPC" でインストラクションを設定。多段回のマクロによる定義でちょっと追い辛い。 うーん、なんとも複雑だ。以下の流れも怪しい。 compile (src/compiler/target-main.lisp) -> compile-in-le…

memo

tests-*-req.scm から適当に抜き出したサンプルについて gauche コンパイルのパス1,2,3を眺める。 ($gref 手続き) というパターンと $asm というパターンがある。また、定数式になってしまうものとそうでないものとがあって、なかなか面白い。HTML 表にして…

YAGHG

http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aYAGHG%3aIntroduction 素晴らしいドキュメント。

Scheme Compiler の勉強(24) - 比較

※適当な粒度で書いていたら 24 回にもなってしまった。元の文書だと全部で24ステップなのに。コンパイラ自体は単純だけど、それが吐き出す結果は十分ややこしい。procedure の定義までできるようになったので、結果をよく眺めてみることにする。また、いま…

Scheme Compiler の勉強(23) - 小まとめ

Abdulaziz Ghuloum さんの "Compilers: Backend to Frontend and Back to Front Again" という文書を参考にして、Scheme とコンパイラ、それからついでに LLVM の勉強をしています。この文書は、コンパイラがけっして魔術的な難しいものではないことを示すた…

memo

うひゃー、これはちょっと眺めたくらいじゃとても理解するのは無理だ。

中間形式

いくつかの処理系毎の scheme 言語レベルでの最適化が終わった中間形式を、 LLVM IR に落としてから LLVM のレベルで最適化を掛けると何が起きるだろう?メモ。 SBCL http://sbcl-internals.cliki.net/Backend 中間表現は IR1, IR2. http://www.cliki.net/LL…

list-tabulate

要素が n 個の list '(x y z) が与えられたときに、"," で連結された文字列を作る。n=3のときは、 "i32 %arg1, i32 %arg2, i32 %arg3" が欲しい(リストの中身は使っていない)。「(Common Lisp の)loop マクロ無しにどうやって '(1 2 3) を作るんだ?doか?…

Scheme Compiler の勉強(22) - letrec ,引数あり、のコンパイル

procedure (letrec) (letrec *1 が通るようになった。おお、これは嬉しい。以下のような scheme のプログラム断片が、 (build-program '(letrec ((f (lambda (n) (if ($fxzero? n) 1 (fx* n (f ($fxsub1 n))))))) (f 3))) 自作の”コンパイラ”によって以下の …