2008.8.31
昨日はバンド練習&焼肉。
正規表現のロジック変更。鬼車の使い方がこれで良いのかいまひとつわからない。
to_string の呼び出しを to_string_call に変更し、NATIVE からの string 変換の呼び出しをメソッド呼び出しにするようにした。
2008.8.24
String::=~ を実装。regex のライブラリには鬼車を使用させて頂きました。
まだ、毎回正規表現をコンパイルしたりと、性能的に使い方がよくないが、今後直してゆくつもり。
2008.8.23
cd コマンド、pwd コマンドを実装しました。
alias コマンドを実装しました。昨日書いた upvar(Tcl流) を、実装の際に名前変えました。
alias a i;
とすると、a の値を i で参照できます。呼び出し元のスタックの変数を参照する場合は、up: 1 とします。
defun foo (x) {
alias up: 1 $x i;
println $i;
}
set n 100
foo n
とすると、100 が表示されます。
make install を書いた。原始的ですみません。
環境変数を、グローバル変数の $ENV で参照できるようになりました。
システムのバージョンを、グローバル変数の $VERSION で参照できるようになりました。
やぐら亭@初台の宇宙一辛い味噌ラーメン、撃沈。。。
2008.8.22
List::append! がバグっていました。
これから、スタックフレーム上の変数を参照するためのコマンドを作成します。
upvar 1 var name
こうすると var で、上位のスタックフレームにある name を参照できるようにします(Tcl にもあるコマンドですね)。制御構造などを書くときに使います。
Array バージョンの素数計算サンプルを作ってみました。が、予想通りリストバージョンに比べて早くありません。予想していたとおりなんですけど。
まず、eval の実行が全体に占める割合が非常に多い。
あと、array をコンテナで持つのでその操作にコストがかかっている、、、
ためだと予想しています。
パフォーマンスチューニングは、また別の機会に。
2008.8.19
以前の版だと、gcc -O2 としていたら core を吐いていたんだけど、今のはなぜかOKだ。なぜだ?
load コマンドなどを追加。
2008.8.17
相変わらず細々とコード書いてます。
今日は、改めて valgrind がすばらしいと思った。
こんなコード
p = malloc(strlen(str));
なんだけど、非常に初歩的なミスですね。
hash.c を書き換えていてやってしまった。
不可解な動作をするので valgrind かけたら一発でわかった。
あー、素晴らしい。
2008.8.16
stack-traceコマンド追加。
trapコマンド追加。
function/method でクロージャの変数を参照できるようになった。
defun foo (i) {
return [fun () {$i ++}];
};
set x [foo 100];
$x; # => 101
$x; # => 102
このようになります。
今までは、No such variable になっていた。
で、クロージャの変数は block でしか参照できなかった。
このように。
defun foo (i) {
return {$i ++};
};
set x [foo 100];
$x eval; # => 101;
$x eval; # => 102;
朝PCを立ち上げたら、VMware が立ち上らなくてあせった。
2008.8.13
とりあえず、グローバルの '@stack-trace' にスタックトレースを出力します。この仕様は整理が必要です。
2008.8.10
stack trace を取得するための仕組み作り。
Exception オブジェクトのメソッドを定義したが、先に評価器にエラーと判断されてしまった。仕方が無いので、変数に stack-trace を設定したが、美しくない。
もう少し考える。
World Happiness@夢の島陸上競技場。HASYMO を聴きに。
2008.8.9
矢野顕子@あきるの市キララホール。
一曲目の Children in the summer でノックアウト。
2008.8.8
FreeBSD に valgrind を入れてみた。
Purify は、その昔国内で SRA が販売を始めたころから使っていて、Linux や FreeBSD などの PC-UNIX でも使えると良いなと思っていたが、今日、Linux で valgrind というツールが使え、Purify とほぼ同じような機能を実現していることを知る。
早速、FreeBSD 6.3R に入れてみる。
BoehmGC との相性が気になったが、案の定 Bus error を吐いて死ぬ。
Makefile.nogc でビルドして、BoehmGC を使わずに実行するときちんと動作はする。やはり BoehmGC との共存は無理なのかな。
実際、デバッグ途中に core を吐くことはあっても、それ以外で落ちることは今のところ無いが、valgrind でも特に気になるエラーは報告されなかった。
すばらしいツールがフリーで手に入ることがわかった。
File::gets と print / println を変更。print / println は、デフォルトで、@out 変数(File オブジェクト)、stdout (初期化時にグローバルに定義される File オブジェクト) の順に探し、最初に見つかったオブジェクトに対して出力するようにしてみた。
set @out [new File]; $@out open "XXX"
とすることで、そのオブジェクトからの print / println の呼び出しは、XXX ファイルに出力される。何も指定しなければ stdout に出力される。
2008.8.7
矢野顕子@調布市グリーンホールのリサイタルへ行く。
相変わらずすばらしいピアノが聴けた。
その後、昔からのファン仲間と飲み会。