「開発の記録など」の編集履歴(バックアップ)一覧に戻る

開発の記録など - (2008/08/31 (日) 23:51:34) の編集履歴(バックアップ)


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

矢野顕子@調布市グリーンホールのリサイタルへ行く。
相変わらずすばらしいピアノが聴けた。
その後、昔からのファン仲間と飲み会。