2008-01-01から1年間の記事一覧

Shibuya.lisp テクニカルトーク第1回感想

2008/10/18 のテクニカルトークに参加させていただきました。司会ならびに運営の皆様、発表者の皆様、ありがとうございました、そしておつかれさまでした。とても刺激になりました。次回は見るだけでなく何かネタを出してみたいと思わせる、そんな集まりでし…

[彷徨える舌] あなたのようにわらえる日よいつか

あなたのその笑顔をみたときに、わたしはそれをうまく表現することばを持たなかったので、強いということばをあてておいた。あなたのその笑顔はただあまりにつよく、あなたは全てに満ち足りてはいなかったはずだけれど、それでもあなたは笑っていた。 いつか…

memo

リスト操作ばっかりしていて、気を抜くと以下のエラーに当たる。 *** ERROR: pair required, but got #f#f が null? じゃないのは学習したはずなのに。しかしこれは追いかけ難い。自作のどこかの手続きで引数のチェック不足かつ返す値を保証できていないよう…

memo

[PowerBook G4] llvm ir -> i386 用アセンブラ -> [sakura (i386, bsd)] -> gcc -> 実行ファイル

sakura internet で gauche (更新)

http://d.hatena.ne.jp/cranebird/20071023 gauche-config --reconfigure | sh http://cranebird.sakura.ne.jp/ ssh-keygen

中毒性

入れ子の SQL, DUAL 表 パイプ処理, awk/perl 一行野郎 loop マクロ, format util.match 上記が身に付くと、暫くの間は何もかもをそれで処理したくなるので注意。ハンマーを持つと何でも叩きたくなるのと同じようなもの。 自分がなったことがないけど中毒性…

memo

中間層を入れたら、バッククォートと,@ が大量に発生。今までは命令を実行していたのが、リストを返すようにしたようなものだから、当然と言えば当然なのだが。で、ちまちまちまちまと手でプログラムを修正してたがこれは辛い。 こんなややこしいはずではな…

memo

LLVM IR を S 式で表現するモジュールを試作中。これの機能はただ単純に、S 式で表現した LLVM IR を LLVM IR の文字列に変換すること。これはどこかで誰かがやってるに違いないと思うが、見つけられなかった。読み飛ばしている可能性も高いけど。 LLVM IR …

match と cut

長いこと「match なんて酸っぱい葡萄だ(=match なんかなくてもプログラムは書ける)」と思っていたが、やっと分かったかもしれない。 ;; S式を変換する例。(ret) は "ret void", (ret '(i32 8)) は "ret i32 8", ;; (ret '(i32 8) '(i1 1)) は "ret i32 8, i …

[彷徨える舌] 時代

「そうなんだ、おれも何かを発信しなきゃあならない、いまさらおっさんが何を言うんだと言うかもしれないけど、おれはそう考えるようになったんだ、その点ブログというのは不思議なシステムで、うん、誰かが語っていた気がするけどきっとこの仕組みは日本的…

[彷徨える舌] ハードル

「○○をしろだって?そんな子供にでもできるような低いハードルは馬鹿にされているようだ、もっと高いハードルをおれに課してくれ」美しい妻は、そんなことは○○を当たり前にやってから言え、と呆れているのだった。ちなみに○○はとても記載することができない。

util.match

唐突に scheme の match (パターンマッチ)に惚れた。これはまさにコンパイラとかインタプリタとか書くための機能だと思う。というより単に式変形のための便利機能ってことか。例)S式の変換を考える。例として、(ret) は "ret void" に、(ret '(i32 8)) は…

SSA, A-normal form

何か関係がある、ような気がする。 LLVM 用にコンパイラを書くってものすごく楽ができる/楽をしているのでは、という気がしてきた。

[彷徨える舌] 追うもの

ふと気付く。いま、3年前のA さん、1年半前の B さんがやっていたことを追いかけているのだと。 自分はとびきりに優秀ではないことが、何かをアウトプットをすることではじめて分かる。と、聡明で美しい妻に話すと、あなたはそんなことに今頃気付いたのか…

gauche 0.8.14

つい先日バージョンアップしたばかりだったけど、せっかくなので 0.8.14 に追随。 先日作ったばっかりの表を新しいバージョンでも試してみた(http://d.hatena.ne.jp/cranebird/20081005/1223169496)。 以下パス1,2,3の出力には compile-p1, compile-p2, comp…

健康診断

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

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))) 自作の”コンパイラ”によって以下の …

Scheme Compiler の勉強(21) - letrec の実装の細分化

あー、自分で書いたものを読み直して、ふと procedure の実装も少し細かいステップに分割できることに気付いた。難しく考えすぎていたようだ。しめしめ、これで先に進めるぞ。 全ての関数が LLVM の i32 を返す(当面これで問題無し。いまのおもちゃのコンパ…

TOEIC

受験。リスニングは「もう1回聞けば確実に分かるのに4つの選択肢を2つに減らす位しかできず勘で選んだ」問題多数。 穴埋め問題は例によってフィーリングで選んだのが多数。勉強しよう。 http://www.toeic.or.jp/toeic/guide01/guide01_01.html 結果発送予…