Entries from 2008-04-01 to 1 month

Gauche と速度比較 3題 - Scheme VM を書く

さあ比較してみよう。 計測条件 X60 Core2 Duo Linux 2.6.22-14-generic #1 SMP Gauche は version 0.8.13 [utf-8,pthreads] 自前処理系は r5198 gcc (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2) -O2 -fomit-frame-pointer 計測結果 計測項…

time コマンド

うへぇ。 time コマンドって内部・外部コマンド両方あるのか。知らんかった。

パフォーマンスチューニングについて悩むこと

ここ数日時間をかけているわりにはインタプリタのパフォーマンスチューニングが進まない。 しかもうまく進む気がしないもやもやする。これは良くない兆候だ。 Mさんに言わせればこれは知識や経験やどこまでやりこんだことがあるかといったものが足りないこと…

R6RSの open-string-output-port を Gauche で書くと

(define (open-string-output-port) (let* ([port (open-output-string)] [proc (lambda () (let1 s (get-output-string port) (port-seek port 0) s))]) (values port proc))) こんな感じ?

unbound variable ELF on top level

今作っているでインタプリタ謎のエラーが出てびびった。 unbound variable ELF on top level うほ。なんだこれ。 自分自身を引数として実行してしまい ELF な実行ファイルの先頭を S式 として解釈しコンパイル。 #(REFER_GLOBAL |top level| ELF) を実行した…

fib 深追い - Scheme VM を書く

fib(30)だとログが膨大になるので fib(26) にした。 コンパイルと eval の傾向は fib(30) と変わらないことは確認済み。 コード (define (fib n) (if (<= n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) (write (fib 26)) (display " :") 結果 REFER_GLOBAL_TOP_…

bbs2chreader拡張 for Firefox 3 を発見

Index of /nightlyにある。(自己責任でインストールしましょう) いつも良く使っている拡張なのでこれはうれしい。 作者の id:fls さんに感謝。 あとはGoogle Browser Sync が対応してくれるのを待つのみだ。

中島らもをはじめて読んだらすげー面白かった

小学生みたいな日記タイトルだな。 それはともかく光成さんにすすめられて読んだのですが、中島らもに期待していなかった分、本当にビックリしたし面白かった。 フィクションですがアフリカの呪術文化とかがまじめに書かれていてぐいぐい読ませる。3巻中の最…

高速化チューニング その4 合成命令とか - Scheme VM を書く

合成命令をいくつか実装した。ほんの気持ち速くなった。 実装したのは以下の命令。 (define-insn BRANCH_NULLP 1) (define-insn BRANCH_EQ 1) (define-insn BRANCH_NUMBER_EQUAL 1) (define-insn BRANCH_NUMBER_GT 1) (define-insn BRANCH_NUMBER_GE 1) (def…

2008/4/8 の comp.lang.scheme

Continuation Fest 2008: Call for Participation 継続フェスの告知 DEFUN08: Call for Talks & Tutorials DEFUN 2008 invites functional programmers who know how to solve problems with functional programming to give talks and lead tutorials at th…

今から PHP 触る

pukiwiki の挙動に不審な点があるため、今から PHP を触る。 sessionファイルが大量に溜まる。 セッション変数は、スーパーグローバル変数として扱われます。なんと1。 session.save_pathのパスの深さが2より大きい場 合、ガーベッジコレクションは行われま…

JVM の命令セットを眺める

合成命令の実装の前に JVM の命令セットを眺めてみた。(VM Spec)目に留まったものをいくつか列挙。 aconst_null Push the null object reference onto the operand stack. bipush The immediate byte is sign-extended to an int value. That value is pus…

高速化チューニング その3 - Scheme VM を書く

方針 internal define を持った手続きもプロファイルとれるようにする。 影響範囲がすべて見通せる小さな化コード片で計測しなおす 以下メモ。 (if 1 2 3) compile 153 usec eval 1usec pass1/sexp->iform と pass3 が26回も呼ばれるのがおかしいと思ったが …

月曜の朝

楽しいぞ。やる気あるぞ。

高速化チューニング その2 - Scheme VM を書く

昨日までの反省点いくつか。 -D GC_DEBUG の ON/OFF で20-30倍も速度が違うので OFF にすべきだった GC_DEBUG を OFF にすると昨日のコードでは実行がすぐ終わってしまうのでもうすこし負荷が高めのコードにすべき。 最適化オプションをつけていなかったが配…

そういえば compiler.cpp

コンパイルに時間がかかることで有名(?)な Gauche の compile.c ですが、僕のところの compiler.cpp は半端じゃなくコンパイルに時間がかかります。 O2 とかにするとやばい。

高速化チューニング その1 - Scheme VM を書く

予想されていたことだが死ぬほど VM が遅い。(特にコンパイラが)以下のコードの実行時間を基準に高速化チューニング (library (rnrs io simple (6)) (export display) (import) (define (display x . port) (if (null? port) (sys-display x) (sys-display…

2008/4/6 の comp.lang.scheme

Why (begin) is the problem? (begin) の扱いについて GMP integration GMP の話が進んでライセンスの話に。処理系はMIT/Xで公開したいんだけど GMP の LGPL v3との組み合わせはどうなんだろうか。

今更ながらに util.match の便利さに気づく

良いライブラリだな。

ライブラリが動くようになった - Scheme VM を書く

(library (rnrs io simple (6)) (export display) (import) (define (display x . port) (if (null? port) (sys-display x) (sys-display x (car port))))) (library (higepon) (export hello) (import (rnrs io simple (6))) (define (hello) (display "hel…

さっきまでデバッグしてた

やっとバグが取れた。ふぅ。 VM が安定して動くようになったのは良いが実行速度がとても遅いことが分かった。 過去の経験と勘から VM 内蔵コンパイラが遅いことが原因であることが推測される。 Scheme で書かれた内蔵コンパイラの一部を C++ で書き直すと劇…

今日はなし 2008/4/4 の comp.lang.scheme

今日はなし。

2008/4/3 の comp.lang.scheme

今日はこれで決まりでしょう。 New Lisp and Functional Programming Comic Novella! Land Of Lispというマンガが紹介されています。 英語のマンガで、ちょっと長めですが、簡単なので見てみると面白いと思います。 最初は流れが Lisp と関係ないように思え…

Firefox 3 安全な更新のために更新情報定義に署名する

Firefox 3 Beta 4 から安全な更新方法を提供しないアドオンは無効になるみたいです。インストールもできません。 関連 URL http://developer.mozilla.org/ja/docs/Extension_Versioning,_Update_and_Compatibility http://developer.mozilla.org/ja/docs/McC…

R6RSのポート好きかも - Scheme VM を書く

処理系が受け取ったコマンドライン引数を内部エンコーディングの文字列に変換して文字列ポートにするみたいなのが書きやすい。 今は外からの入力を UTF-8 に限っているからかもしれませんが。

マクロが動くようになった - Scheme VM を書く

伝統的なマクロが動くようになった。 マクロを評価するには、コンパイル時に手続きを評価できる必要があります。 つまりコンパイラがVM(評価器)を保持している必要があるのです。 なので構造的に VM がコンパイラに依存(これは当たり前) コンパイラが VM…

importが動かない

ライブラリの import が動かない。 むぅ。 import の後に RETURN しないとまずいんだっけか。コードを見直そう。

receive マクロ

(define-macro (receive . args) `(call-with-values (lambda () ,(cadr args)) (lambda ,(car args) ,@(cddr args)))) こんな感じで良いかしら。

ランディ・パウシュ教授の最終講義を見た

たつをさんのところで紹介されていた「ランディ・パウシュ教授の最終講義」を見ました。 これだけ多くの人が見た方が良いというのだから何から得るものがあるはずだろうと。 ちなみに見た人は分かると思いますが↓のひとはランディ教授ではありません。http:/…