Entries from 2007-09-01 to 1 month

uIP

以前 uIP のWindows移植をしたのだけどコンパイルできなくて困ってる外人さんがいるっぽいな 助けてあげたいがWindows開発環境がない(ぉ

Boehm GC を独自OSに移植する方法

かの有名なガベージコレクタ Boehm GC を独自OSに移植する方法を紹介します。 想定読者は独自OSかそれに近いものを作っている人です。 前提 サンプルターゲットは Mona OS。 configure オプションは以下の通りで、スレッドは使わない ./configure --enable-c…

Boehm GC を Monaに移植中

ifdef だらけでですなー。 マイナOSには辛いところだ。 追記 writeがないと怒られる sbrk がないと怒られる sbrk が「しばらく」に見えてしょうがない 追記2 コンパイル通ったが死ぬ。 デバッグは明日。

Honey B〜みつばちダンス

Honey B〜みつばちダンスが脳内をループしています。 今日PVを発見し再びブーム。

Emacs でコピペするとき困ること

ソースコード中に要らないものがあって、それを目で見ながらコピペで置き換えたい場合に困る。 不要な行1; ほげ; 不要な行2; ふが; 不要な行3; ひげ;というようなコードで、不要な行をそれぞれクリップボードにある「必要な行」に置き換えるとすると 不要…

Boehm GC速い => なぜかがっかり

処理系の Boehm GC に変えてLinuxで動かしたら超速い。(gprofとった) と思ったのだけどデフォルトでは pthread で stop world をふがふがしている痕跡が。 Mona で動かないじゃん。スレッドはあるけどシグナルとかかっこいい同期の仕組みがががが。

Re:マシン語を知らない子ども達

マシン語を知らない子ども達 完全に乗り遅れたけどなんとなく。 いちおうLLと呼ばれる上の方からOSの下の方までコードを書いたことがあるけど、マシン語を特別扱いはせず ソートのアルゴリズムを知っている PHPでWebアプリが書ける と同列くらいの選択肢のひ…

末尾再帰最適化を実装した

遅くなったけど自前処理系に末尾再帰最適化を実装した。 (define (hoge i) (if (> i 1000000) i (hoge (+ 1 i)))) (display (hoge 0)) こんなコードを書いてもスタックの消費がとても少なくてうれしい。 これで Scheme 処理系を名乗れるかなー。さあ次は GC …

Ogg Vorbis decode 解決 by mjt氏

id:mjt氏の尽力により Ogg Vorbis の decode がMonaでできるようになった。 monalibc の qsort がバグっていたというオチ。

Portable syntax-case を発見

Portable syntax-case Kent先生だ。

3年前に書いたWordのファイルにパスワードが。。。

3年前に書いたWordのファイルにパスワードが。 パスワード忘れた!。 というわけで、その手のツールを探していたのだけど中々フリーなモノがない。 今は↓で解析中。 http://www.vicman.net/dir/48026/Download-Ms-Word-Excel-Cracker.htm

初音ミク

すご。(気づくの遅い)

Ubuntu Edgy on Thinkpad X60 で 無線LANカード WLI-CB-G54を使う

以前から X60 の無線LANが調子悪いと書いていたら、id:m432さんから外付けの無線LANカードを試してみてはと有用なアドバイスを頂いた。 ちょうど家に余っていた BUFFALO WLI-CB-G54 というカードを Ubuntu Edgy で動かす。 ただ刺しただけだと dmesg に以下…

カンマ演算子の活用

C++

カンマ演算子の悪用活用 #define FOREACH_LIST(list, kar, kdr, syntax) \ for (Object *l = list, *kdr = ((Cons*)l)->getCdr(), *kar = ((Cons*)l)->getCar(); \ ; kdr->isCons() ? (l = kdr, kdr = ((Cons*)l)->getCdr(), kar = ((Cons*)l)->getCar()):\ …

YARV

YARVアーキテクチャを読んだ。 追記 YARV Maniacs も超面白いじゃんすか。

Three Implementation Models for Scheme by R. Kent Dybvig

ドラゴンブックを読み終わったあと、実は「Three Implementation Models for Scheme by R. Kent Dybvig」という論文を読んでた。 これは id:yhara さんにすすめられたもので、「Scheme の処理系を3つのモデルで実装する方法」を長所/短所をまじえて説明して…

処理系の書き直し一段落

hygienicマクロ以外は処理系の書き直しが完了したので gprof してみた。 ヒープベースモデルなので教科書通り、変数の lookup がボトルネックになっていることが分かった。 スタックベースの VM に書き換えても良いのでは無いかとも思っているがこのままもう…

C++で多重継承を使ってはいけない1つの理由

C++

多重継承に限らないけど、仮想関数テーブル(へのポインタ変数)のせいで、キャストによってポインタのアドレスが変わることがある。 なのでガベージコレクタ(GC)を併用しているときに死ぬ。 GC は、new が返したアドレスが参照されているかどうか?で mark …

#scheme

ひさしぶりに #scheme で話した。 Gaucheの c-wrapper を教えてもらった。 泥くさいけど超かっこいいいいい。

あああ

いつものことながら gcc のことを書き出すと目に見えてアクセス数が落ちる当ブログですが,そこはまぁ KY で (最近の中高生は「空気読めない」をこういうそうです). Monaとか receive-loose とか acond とか書くと目に見えて(ry

マクロのマッチングを実装しよう - 5. match

下準備が長かったけどいよいよ On Lispの match を実装する。match は引数 x, y を比較しマッチしているか確認する。 x と y が等しい場合はマッチする _ は何とでもマッチする(何もないとはマッチしない) x や y が既に束縛されているなら値を展開してか…

体調

夫婦そろって体調が悪い。 早く寝よう。頭使わない作業をしよう。

facilitate/retention/entails/notion/augment/analog /concession/outweigh/manipulate/resides/pose

アナログじゃない analog の意味を知った。

ポインタのポインタのポインタ

ひさしぶりに見た int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm){

今日の1行

char* buf = new char[64]; ↓ volatile char* volatile buf = new char[64]; GCのテストのために、書いたテストコード。 これ以降参照されないので不要コードとして -O3 では削除される。 これに精一杯抵抗したのが volatile 。

X60

また無線の調子がおかしい。 httpリクエストが1/10くらい固まる気がする。 X61に替えたい。

rib/explicit/acyclic/dissertation/straightforward/nuate

nuate が辞書に載ってねぇぇぇ。 VM の nuate instruction という文脈なのだが。

処理系の速度改善

util::String::size() が60万回も呼ばれていて遅いみたい。 Stringの内部で呼ばれることが多いので全部 length_ で置き換えた(ぉぃ 全般的に文字列処理が遅いな。 Stringの operator=とか。 字句解析・構文解析でC++のString的なものを使うのは富豪的すぎる…

マクロのマッチングを実装しよう - 4.寛容な receive

多値を扱う receive は引数の数に厳格で acond2 と相性が良くない。 例えば (receive (a b) (values 3 4) (+ a b)) => 7 は (a b) と values 返す多値が同じ個数だから OK。 でも期待しているよりも少ない個数の場合はエラーになる。(Gauche で確認) (rece…

-O1で gc が暴走

gcc の最適化オプション -O1 でインタプリタをコンパイルすると gc が解放しすぎてしまうみたい。 困った。 どうやってデバッグしようか。 個別最適化オプションをひとつずつ試すか?