Entries from 2007-09-01 to 1 month
以前 uIP のWindows移植をしたのだけどコンパイルできなくて困ってる外人さんがいるっぽいな 助けてあげたいがWindows開発環境がない(ぉ
かの有名なガベージコレクタ Boehm GC を独自OSに移植する方法を紹介します。 想定読者は独自OSかそれに近いものを作っている人です。 前提 サンプルターゲットは Mona OS。 configure オプションは以下の通りで、スレッドは使わない ./configure --enable-c…
ifdef だらけでですなー。 マイナOSには辛いところだ。 追記 writeがないと怒られる sbrk がないと怒られる sbrk が「しばらく」に見えてしょうがない 追記2 コンパイル通ったが死ぬ。 デバッグは明日。
Honey B〜みつばちダンスが脳内をループしています。 今日PVを発見し再びブーム。
ソースコード中に要らないものがあって、それを目で見ながらコピペで置き換えたい場合に困る。 不要な行1; ほげ; 不要な行2; ふが; 不要な行3; ひげ;というようなコードで、不要な行をそれぞれクリップボードにある「必要な行」に置き換えるとすると 不要…
処理系の Boehm GC に変えてLinuxで動かしたら超速い。(gprofとった) と思ったのだけどデフォルトでは pthread で stop world をふがふがしている痕跡が。 Mona で動かないじゃん。スレッドはあるけどシグナルとかかっこいい同期の仕組みがががが。
マシン語を知らない子ども達 完全に乗り遅れたけどなんとなく。 いちおうLLと呼ばれる上の方からOSの下の方までコードを書いたことがあるけど、マシン語を特別扱いはせず ソートのアルゴリズムを知っている PHPでWebアプリが書ける と同列くらいの選択肢のひ…
遅くなったけど自前処理系に末尾再帰最適化を実装した。 (define (hoge i) (if (> i 1000000) i (hoge (+ 1 i)))) (display (hoge 0)) こんなコードを書いてもスタックの消費がとても少なくてうれしい。 これで Scheme 処理系を名乗れるかなー。さあ次は GC …
id:mjt氏の尽力により Ogg Vorbis の decode がMonaでできるようになった。 monalibc の qsort がバグっていたというオチ。
Portable syntax-case Kent先生だ。
3年前に書いたWordのファイルにパスワードが。 パスワード忘れた!。 というわけで、その手のツールを探していたのだけど中々フリーなモノがない。 今は↓で解析中。 http://www.vicman.net/dir/48026/Download-Ms-Word-Excel-Cracker.htm
すご。(気づくの遅い)
以前から X60 の無線LANが調子悪いと書いていたら、id:m432さんから外付けの無線LANカードを試してみてはと有用なアドバイスを頂いた。 ちょうど家に余っていた BUFFALO WLI-CB-G54 というカードを Ubuntu Edgy で動かす。 ただ刺しただけだと dmesg に以下…
カンマ演算子の悪用活用 #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 Maniacs も超面白いじゃんすか。
ドラゴンブックを読み終わったあと、実は「Three Implementation Models for Scheme by R. Kent Dybvig」という論文を読んでた。 これは id:yhara さんにすすめられたもので、「Scheme の処理系を3つのモデルで実装する方法」を長所/短所をまじえて説明して…
hygienicマクロ以外は処理系の書き直しが完了したので gprof してみた。 ヒープベースモデルなので教科書通り、変数の lookup がボトルネックになっていることが分かった。 スタックベースの VM に書き換えても良いのでは無いかとも思っているがこのままもう…
多重継承に限らないけど、仮想関数テーブル(へのポインタ変数)のせいで、キャストによってポインタのアドレスが変わることがある。 なのでガベージコレクタ(GC)を併用しているときに死ぬ。 GC は、new が返したアドレスが参照されているかどうか?で mark …
ひさしぶりに #scheme で話した。 Gaucheの c-wrapper を教えてもらった。 泥くさいけど超かっこいいいいい。
いつものことながら gcc のことを書き出すと目に見えてアクセス数が落ちる当ブログですが,そこはまぁ KY で (最近の中高生は「空気読めない」をこういうそうです). Monaとか receive-loose とか acond とか書くと目に見えて(ry
下準備が長かったけどいよいよ On Lispの match を実装する。match は引数 x, y を比較しマッチしているか確認する。 x と y が等しい場合はマッチする _ は何とでもマッチする(何もないとはマッチしない) x や y が既に束縛されているなら値を展開してか…
夫婦そろって体調が悪い。 早く寝よう。頭使わない作業をしよう。
アナログじゃない analog の意味を知った。
ひさしぶりに見た int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm){
char* buf = new char[64]; ↓ volatile char* volatile buf = new char[64]; GCのテストのために、書いたテストコード。 これ以降参照されないので不要コードとして -O3 では削除される。 これに精一杯抵抗したのが volatile 。
また無線の調子がおかしい。 httpリクエストが1/10くらい固まる気がする。 X61に替えたい。
nuate が辞書に載ってねぇぇぇ。 VM の nuate instruction という文脈なのだが。
util::String::size() が60万回も呼ばれていて遅いみたい。 Stringの内部で呼ばれることが多いので全部 length_ で置き換えた(ぉぃ 全般的に文字列処理が遅いな。 Stringの operator=とか。 字句解析・構文解析でC++のString的なものを使うのは富豪的すぎる…
多値を扱う receive は引数の数に厳格で acond2 と相性が良くない。 例えば (receive (a b) (values 3 4) (+ a b)) => 7 は (a b) と values 返す多値が同じ個数だから OK。 でも期待しているよりも少ない個数の場合はエラーになる。(Gauche で確認) (rece…
gcc の最適化オプション -O1 でインタプリタをコンパイルすると gc が解放しすぎてしまうみたい。 困った。 どうやってデバッグしようか。 個別最適化オプションをひとつずつ試すか?