デバッガーがついてる!すごいね。

luaplusにはデバッガーがついてきます。とりあえず、スタンドアローンで動くデバッガは動きました。VS.netのアドインデバッガが動かないけど、これはまた明日。

う〜ん、乗り換えてしまった。

VM を簡単に共有できない(「[small]う〜ん、Abstract Machine の使い回しができない」を見てね)がどうしようもなく気になり、small をやめてしまいました。
そして、lua に戻ってきました。どうも、luaplus というライブラリがよさげです。前に僕が気にしていた realloc の問題もカスタマイズ可能にしてくれています。ちょっとこれを追っていこうと思います。

http://luaplus.org/

う〜ん、Abstract Machine の使い回しができない

.amx ファイルからコード部とデータ部のみを取り出し、Abstract Machine を共有することで使用メモリの圧縮を試みるも失敗。smallで利用するメモリサイズは、コンパイラ

C:\Small\bin>sc hello.sma -S65

のように、-S オプションで指定する。この場合、全てのスクリプトが 65 * 4 bytes 使うことになる。こんなことよりも、スクリプトで共有する 64KB 位のスタックを用意しておいて、いろんなスクリプトをその上で動かせる方がいいのだが...。

速度計測

small:

    new Float: a = 0.5;
    new Float: b = 0.8;
    new Float: s = 0.0;
    for ( new i = 0; i < 10; ++i ) {
        s += a + b;
        s += a;
        s += b;
    }

C:

    float a = 0.5;
    float b = 0.8;
    float s = 0.0;
    int i;
    for ( i = 0; i < 10; ++i ) {
        s += a + b;
        s += a;
        s += b;
    }

実行結果:

100 万回回した結果です。

small : 32.95 秒, C : 0.31 秒。

約 100 倍ほど重いですね。
スクリプト言語としては軽いんでしょうか?重いんでしょうか?判断に苦しみます。一応、VM は C の物を使っています。最適化などは一切していないので、なんともいえません。基本的に small からはホスト側の関数呼び出し以外行わせないようにすれば、それで問題無い気もしますが...。

一応、同様のことを float ではなく int でもやってみました。

small:

	new a = 1;
	new b = 2;
	new s = 0;
	for ( new i = 0; i < 10; ++i ) {
		s += a + b;
		s += a;
		s += b;
	}

C:

	int a = 0;
	int b = 0;
	int s = 0;
	int i;
	for ( i = 0; i < 10; ++i ) {
		s += a + b;
		s += a;
		s += b;
	}

small : 19.17, C : 0.22

あんまり、変わりませんね。大体 100 倍くらいになるようです。