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

開発の記録など - (2008/09/07 (日) 22:47:18) のソース

** 2008.9.7
昨日は飲みすぎた。
いくつかの修正。
-init メソッドに引数を指定できるようにした。
-Hash/Array に引数を指定できるようにした。
-new コマンドの糖衣構文を導入した。
これで、何ができるかというと、このように書くオブジェクトの初期化が、

 set o [new Hash arg: (((a . 1) (b . 2)))]

このように書けるようになった。

 set o `Hash((a . 1) (b . 2))

というだけなんだけど。とりあえず、お試し機能ということで。

あと、キーワード引数の糖衣構文も作った。

 foo switch: 1

は、

 foo :switch

と等価です。"switch:" キーワード引数の変数に非 nil が設定される。



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























----