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

無力

自分の周り(近く、遠くに)に心身を病んでいる人が多いのに何もできない。 こんなときは作業一覧を作って優先度をつけても、動けない。

memo

もっとデータを取り出し、繰返しを取り除かないといけないのだが、プログラムを書いているのかただのデータ変換器を書いているのか分からなくなってきた。完全にデータで動くようにして、その先に本当の難しさがあるのだろうなぁ。 またまだ素の言語要素で書…

memo

LLVM 2.4 リリース http://www.llvm.org/docs/ReleaseNotes.html

memo2

リファクタリング中 Qemu 64bit/x86 emu

memo

Maeve ファーストリリース。C/C++ で書かれている gauche/mosh/ypsilon に比べて(そのため自分には深く追えていない) scheme で書かれているので読みやすいかな?と一瞬思ったがもちろんそんなことは無いなぁ。そのうえ x86-64 環境前提なので動かすことも…

memo

LLVM は制限があるものの Tail call optimization をサポートしている。http://www.llvm.org/docs/CodeGenerator.html#tailcallopt したがって、 scheme レベルで tail position にあるかどうかチェックして、適切な LLVM を出力してやればいい? 最適化のオ…

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

前口上 Abdulaziz Ghuloum さんの "Compilers: Backend to Frontend and Back to Front Again" という文書などを参考にして、LLVM 用 Scheme コンパイラを作りながら、コンパイラ、Scheme、LLVM の勉強をしています。わたしの目的は二つあって、一つは自分が…

Scheme Compiler の勉強(30) - tail call

http://d.hatena.ne.jp/cranebird/20081106 の続き。自作トイコンパイラで tail call 対応したので以下のテストが通るようになった。 gosh> (run-program '(letrec ([e (lambda (x) (if ($fxzero? x) #t (o ($fxsub1 x))))] [o (lambda (x) (if ($fxzero? x)…

memo

そろそろ intel マシンが手元に必要な気がする。

Scheme Compiler の勉強(29) - app の実装と EXC_BAD_ACCESS

apply もどきの app を実装していなかったので実装。もどきと思うのは、(app f e1 e2 ..) は単に e1 e2 ... を評価して f を実行するだけで、リストでなくてもよいから。今までは先走って app を使わずに手続きを呼び出すような実装をしてた。tests-1.8-req.…

Clojure + Processing(6) - memo

http://d.hatena.ne.jp/cranebird/20081102 の続き。見つけたバグは作者の Roland さんに fix してもらえた。ハッピーだ。 今の clojure は ClassLoader 周りの問題で、すくなくとも今のままではアプレットにできない(java.security.AccessControlException…

memo2

マクロで個別に定義していた S式=>文字列の変換を、まとめて一つの match(util.match) に変更。今までが無駄に長過ぎた、、まとめるとさらに冗長かつ不足していることが明らかになった。もっと繰返しを省いて「楽」をしないと。 それにしても util.match は…

memo

http://ja.wikipedia.org/wiki/ソフトウェアトランザクショナルメモリ うーんまるで分からない。clojure に出てくる。 Scheme、ML、Haskell などの関数型言語のコンパイラでは、Fortran や C などのコンパイラで SSA の利用が期待される箇所で continuation …

Scheme Compiler の勉強(28) - pair?, cons, car, cdr

ようやく pair?, cons, car, cdr のセットを実装。 gosh> (run-program '(pair? (cons 1 2))) "#t\n" gosh> (run-program '(car (cons 1 2))) "1\n" gosh> (run-program '(cons 1 2)) "<pair: 0x02800401>\n" gosh> (run-program '(letrec ((list (lambda (x y) (cons x (cons </pair:>…

Clojure + Processing(5) - Processing wrapper for clojure

自分で書く前に clojure の google group で見つけた。 http://groups.google.com/group/clojure/browse_thread/thread/5e2a056ed3935191 Roland Sadowski さんによる。素晴らしい。こっちで気付いたことが既にカバーされているようだ。うーん、2ヶ月ほど遅…

Clojure + Proce55ing(4)

Follow1 - 2 クロージャーに全体をいれてしまうと少しは見やすいか?Python で self を明示的に渡すときのようなコードになってるけど。 Processing の場合は、全体が PApplet のサブクラスとして書かれる。グローバル変数に見えるものは実際はインスタンス…

Clojure + Proce55ing(3)

Clojure は思っていたよりはずっと大きな Lisp 方言で、http://www.proce55ing.org/learning/topics/follow1.html を Clojure で書こうとしたが、なかなかうまくいかない。まだぜんぜん Clojure が分かっていない、ということが手を動かしたので分かった。以…

Clojure + Proce55ing(2)

前に書いたように、 Clojure は普通に既存の Java のクラスのインスタンスを作成したり、リスナーを作成したりできる。ここらへんの機能は jython 同様 reflection を使っていると思われる(当然速度面ではペナルティとなっているはず)。いま試している Proce…

バイオインフォマティクス技術者への道(2)

過去問をたらたらとだいたい解いたところ。「ここはよく分かっていないから勉強」「ここは解けないと恥ずかしい」「ここは当然分かる」など様々。 基本的に基礎的問題で、かつ選択式なので消去法で解けるものが多い。が、余力を持って回答できるように勉強す…

Scheme Compiler の勉強(27) - cons?

※以下根本的な嘘、勘違いが含まれる可能性大。 cons, car, cdr を LLVM IR 直書きでテストした。(自作のS式表現が、グローバル変数の宣言に対応していなかったので仕方なく直に書いた‥) メモリを malloc で確保して、その位置をグローバル変数に確保してお…

www.memorymanagement.org

http://www.memorymanagement.org/ メモリー管理大全?膨大な有用そうな情報。 http://www.memorymanagement.org/glossary/h.html#heap.allocation Heap Allocation http://www.memorymanagement.org/glossary/t.html#tag Tag http://www.memorymanagement.o…

バイオインフォマティクス技術者への道(1)

まず、直近の目標として11月30日の「日本バイオインフォマティクス学会主催バイオインフォマティクス技術者認定試験」に受かること(昨年の第1回は実は受け損なった)。「バイオインフォマティクスの基本的知識が備わっているかを評価する」ための試験…

バイオインフォマティクス技術者への道(0)

唐突ですが平成20年11月30日(日)の「バイオインフォマティクス技術者認定試験」へ向けての日記を書くことにします。 http://www.jsbi.org/modules/jsbi/index.php/nintei/index.html によれば受付は今月中です。

バイオ

中村さんのhttp://www.asahi-net.or.jp/~ki4s-NKMR/ より。そういえば Shibuya.lisp で中村正三郎さんとお会いできたのに、筒井康隆の話をしそこねました。残念。最初に自分が「メタ」(メタデータとかメタ言語とか)に興味を持ったのは筒井SFだったかもなぁ…

memo

"Compiler Construction Using Scheme" http://www.cs.indiana.edu/~dyb/pubs/fple95.pdf こんなの見つけた。"Compiler Construction Using Scheme" より。 (let ((f (lambda (x) (let ((y (+ x 1))) (lambda (z) (cons y (cons z (quote (1 2))))))))) ((f …

Clojure + Proce55ing

話題の Clojure(http://clojure.org/)。 id:g000001 さん(http://cadr.g.hatena.ne.jp/g000001/)がとても詳しい。Clojure って JVM で動くんだよなぁ、ってことは Java のライブラリも呼べるよなぁ、そうすると Proce55ing も呼べるなぁ、そうするとhttp://d…

TODO

malloc と tagged pointer でコンスセルを実装したい。まだ2ステップか3ステップくらい理解が足りていない、と想定。情報が少ない。 runtime.c を LLVM で書き直して、 LLVM だけで完結したい。(printf などを呼び出すことは良い) リファクタリング。まだ…

memo

Shibuya.lisp で知って楽しそうなので dyncomp 少しだけ眺めてみる。 tiny C + gauche.cgen.cise (S 式でC!). 実に残念なことに PPC では tiny C が動かない様子。 いったいどうやって動的に作成した C の関数を gauche の世界から呼べるようにしているのか…

memo

http://llvm.org/docs/Passes.html コンパイラを最適化する人はたいへんですね、と人ごとのように放置してもいいけれど。ちゃんと勉強するには、これ一つずつ on/off して、かつ組み合わせも考慮して、どういうことが起きるか見なくちゃ駄目なのか?いや、各…

Scheme Compiler の勉強(26) - リファクタリング一応完了

やっと S 式 -> S 式での LLVM IR -> LLVM という流れができ、テストが通った。いままでは S 式 -> LLVM というシンプルな作りだった。 ただし、まだ足し算程度しかできず、何より cons が無い。これからだ。 gosh> (map pprint-ir (program->insts '(letrec…