Entries from 2007-12-01 to 1 month

プロファイル - Scheme VM を書く

Bignum の実装が一段落した。 やっとプロファイラを動かしてコンパイラの実効速度が著しく遅い件を調べることができる。 事実 Wiki のコンパイルに 0.4 sec。 Wiki の実行に 0.6 sec。 Wiki の実行の 2/3 はコンパイル。 VM on Gauche が VM on C++ よりも速…

次はコンパイル時の最適化か

次はコンパイル時の最適化かな。 代表的で効果のありそうな最適化を実装したい。 特に let/named let/letrec/let* などあらゆるところで使われる lambda 式の最適化が必要だ。 Three Imp にヒントだけ書いてあったような気がする。 あとは Gauche の compile…

C++側での最適化 - Scheme VM を書く

VM の構造を変えない限りはアルゴリズム的に改善する余地はあまりない。 そこで C++ 実装面での最適化を行う。 Wiki のコードのコンパイルにかかる時間を基準に計測しつつ最適化。 対応 sec 元の状態 0.650 -fomit-frame-pointerをつける 0.400 always inlin…

パン屋再襲撃

村上春樹のパン屋再襲撃を公園のベンチで読む。 遅れてきた紅葉が美しい。 短編集。 「ファミリー・アフェア」という話が気に入った。 同居している兄妹が、妹の婚約とその婚約者の登場で関係を変化させるという話。 自分には妹がいないので説得力がないが、…

Bignum 実装中2 - Scheme VM を書く

今日は調子が良く実装ががっつり進んだ。 こんなことが出来るようになりました。 (display (* 12345689123456789123456789 123456789)) => 1524159137174199765432099750190521 明日には終わりそう。 todo [ok]absolute な add/sub を実装 [ok]符号を加味し…

早起き

今日は珍しくいつも起きないような早い(相対的に)時間に目が覚めた。 ここ1週間毎日のように目覚しをかけず、10時間以上コンスタントに寝た。 おかげで体調が素晴らしく良かったのだけどそれの影響だと思う。開店と同時に近い形でスタバに行き、集中力を保…

もろもろ

gdb用のexceptionHandler()を実装。 Guache Readingの補助ツールを書いた。(Scheme版 www-mechanizeが欲しいね。) 新しくおいしいパン屋を発見。以前つぶれたパン屋と同じ場所。(オーブン/窯つき物件?) Bignumは libtommathを使ったらとアドバイスをもらう

Bignum 実装中 - Scheme VM を書く

Bignum を実装中。 実装は Gauche の実装のほぼそのままなのだけど、理解しながらゆっくり移植(or 最実装)していて大変勉強になる。 足し算、 引き算、比較などは想像通りの実現方法。 かけ算が面白い。 小学校で習った、筆算のかけ算のそのままなんですよ…

あれ?

GDBスタブのexceptionHandlerを調べているはずが、やる夫の小説家スレ読んでた。。

世界の日本人ジョーク集

人にすすめられて、世界の日本人ジョーク集を読んだ。 毛色の違う本を読むのもいいね。 日本は世界からどう見えているのか?という視点で様々なジョークが紹介されていて面白いです。 経済大国や独創性の国と良くとらえたものもあれば、アジア諸国との比較で…

VMの実装で今さら気づいたこと

以前と call/cc の実装方法が違うのでコンストラクタデストラクタが2回走ることはほぼない。 つまり STL 使える。 気づくの遅い。。

The LispOS - from Reddit

The LispOS Archives 「different alternatives for lispOS」と題する thread には Scheme が出てきたり、最低限のLinux を使ってGCを載せてLisp or Scheme にしようなんて話が。 Layer a scheme distribution on top of a minimal Linux distribution. Stri…

参考になる

デジイチデビュー、一年後 - bkブログ 日中シンクロ PLフィルタ ミニ三脚 シャッター速度 僕もカメラ買ってから外に出かける機会が多くなったなあ。

Ubuntu Edgyで Gaim が調子悪い

最近 Gaim で入力を受け付けなかったり、CPU100%で固まったりするんですがなぜだろう。 apt 上は最新なのだけども。 追記 id:YasuyukiMiura さんから情報がありがとうございます。 プロジェクト名が Gaim から Pidgin(http://www.pidgin.im/) という名称に変…

C++の template をもっと勉強すべきか

dynamic cast が使えない環境で Scheme VM の内部オブジェクト(Integer, UCS4Char,String, Regexp,Pair)を C++ のテンプレートを駆使してうまく(パフォーマンス良く、安全に)構築できないか考えたが思い浮かばない。 関数テンプレートもクラステンプレー…

Bignum が必要だ

profiler の結果の整数が overflow した。 まさかこんな理由で Bignum が必要になるとは。 EoPLにBignum実装があった記憶がある。

コンパイルが遅い原因を探る - Scheme VM を書く

VM 側に profiler っぽいものを仕込み、Gauche で整形ツールを書いたが、VMの構造上正確に計測するのが難しいことが分かった。 手続き名と、手続きの最後まで実行されたという目印を見つけるのが難しいのだ。 3時間くらいかけたことを捨てなくてはいけないが…

knol

knolにMonaのページを作りたい。一番詳しく書くよ。

探偵伯爵と僕 / 少し変わった子あります

前職を辞めてから最初にやりたかったことは、コードを思いっきり書くこと、プールで泳ぎまくること。 これらが叶った後にやってきたのは本を読むことだった。 自分の人生に何がぷかぷかと浮いてくるかを知れた。 最近はしばらくたまっていた、森博嗣の未読を…

コンパイラをVMに内蔵する - Scheme VM を書く

compiler.scmc (コンパイル済みコード)を VM で eval する。 evaluteFile("./compiler.scmc"); compiler.scmc 中で定義された compile 手続きを C++ コード中から呼び出しコンパイル時に使う。 おお!動いた。 コンパイラは Scheme で書くという大きなメリ…

Bignum勉強中

実装に向けて勉強中。 add の桁あふれを portable に書く方法とか。 この方面は初めてで刺激的だな。 明日は忙しいので実装は明後日かな。

C++のもやもや局面

c++

こういうのってどうしているんだろうな。 その1 Cのテクニックで構造体の最後のメンバを ポインタ or 配列 にして、それを経由して配列のサイズ以上にアクセスするってやつがあるじゃないですか。 固定長ヘッダを持つ、可変長のデータ構造とか(他にもあるけ…

言語処理系を作っている人と実装の雑談がしたい

言語処理系を作っている人と実装の雑談がしたいよ。 どこまでコンパイル時に展開されるようにしているか 最適化どこまでがんばっているの? 内部エンコーディングの話とか プロファイリングとか

コンパイラを VM で動かす3 - Scheme VM を書く

ひたすらテストが通るようにがんばるぜよ。 正規表現リテラルの出力がおかしい。#が抜けている => ok 文字列ライブラリが GC 前提なのにマクロを定義していなくて delete[] されてた (string-split "12\n34\n56" #\newline) のコンパイルがおかしい 文字列の…

自衛隊とIT業界

妻との会話。 ひげ「腹筋割りたいんだよね。どうにかならいかな。ジム通う?」 妻「自衛隊に入ったら?絶対腹筋割れるよ。」 ひげ「えー。でもさあ。訓練で亡くなったりする人も年間何人かいるんじゃない?」 妻「そんなこといったらIT業界で過労死する人だ…

C言語で lambda っぽいもの - from reddit

Reddit で見つけたネタ。 programming: First Class Functions in C int main() { returns_int_f *times2 = returns_int_lambda("int f(x) { return x * 2; }"); int answer = (*times2)(55); printf("answer is %d\n", answer); } C言語で lambda 式が作れ…

doxygenてどう?

5〜6年前に Mona を始めたころ doxygen を使っていました。 最近の流行りは何でしょうか?まだ doxygen は使われています?勢力伸びてます? 教えて詳しい人!

Uart ドライバできた

kaz さんに教えてもらった方法で QEMU の COM1/COM2 に対する read/write が動きました。 Uart* com2 = new Uart(Uart::COM2); g_console->printf("read=%c", com2->readChar()); こう使います。うっし!

退屈を人に押しつけたり

「退屈を人に押しつけたり」。 BONNIE PINK の歌にこのような歌詞があった。 いいね。

コンパイラを VM で動かす2 - Scheme VM を書く

(HALT) の const compile がうまくいっていない => ok #t\0 と出力がおかしい => ok UCS-4 文字列長の扱いが間違っていた コンパイル結果から (CONSTANT () が消えてしまう 正しく read できているか? => できてない read.cpp で #define SCM_SYM_QUOTE Sym…