« JavaScript は、なぜプロトタイプベースなのか | メイン | JavaScript のベンチマーク »

2006年10月20日

re: javascript vs perl - オブジェクトのメモリー効率

というわけで、間違っていることを実証してみました。

javascript vs perl - オブジェクトのメモリー効率 - 404 Blog Not Found

 言語仕様のメモリ効率性を考えるのにあたって、(メモリの潤沢な環境向けの) 特定の実装間の比較をしても意味がないと思います。「perl のソースコードよりも SpiderMonkey のソースコードのほうが小さい」というような優劣の比較に (ほとんど) 意味がないのと同じです。

 また、シンセティックなベンチマークもどうかと思います。たとえば、弾さんのコードをちょっといじれば、以下のようにプロトタイプ指向 OO のメモリ効率の良さを強調したテストを作ることだってできるわけです (5つのメンバ変数のうち4つがデフォルト値であるようなオブジェクトの大量生成)。

[kazuho@colin-types:~/tmp/dankogai]$ cat defobj.pl
#! /usr/bin/perl
package Thingy;
sub new {
    bless {
        bool => true,
        num => 1,
        str => '',
        ary => (),
        obj => {}
    }, shift;
}
package main;
my @thingies;
for (my $i = 0; $i < 10000; $i++) {
    $thingies[$i] = Thingy->new();
    $thingies[$i]->{num} = $i;
}
1 while 1;
[kazuho@colin-types:~/tmp/dankogai]$ cat defobj.js
#! /usr/bin/js
function Thingy() {};
Thingy.prototype = {
    bool: true,
    num: 1,
    str: '',
    ary: [],
    obj: {}
};
var thingies = [];
for (var i = 0; i < 10000; i++){
    thingies[i] = new Thingy();
    thingies[i].num = i;
}
while (true);
[kazuho@colin-types:~/tmp/dankogai]$ nice ./defobj.pl &
[2] 1371
[kazuho@colin-types:~/tmp/dankogai]$ nice ./defobj.js &
[3] 1372
[kazuho@colin-types:~/tmp/dankogai]$ ps gux | grep defobj
Unknown HZ value! (86) Assume 100.
kazuho    1371 74.3  2.3  6548 4592 ttyp0    RN   04:26   0:07 /usr/bin/perl ./defobj.pl
kazuho    1372 47.8  1.5 10412 2972 ttyp0    RN   04:26   0:02 /usr/bin/js ./defobj.js

 実際のコードにおいても、HTML 要素の style オブジェクトのように、デフォルト値のままの要素がほとんどのインスタンスが、大量に生成されるケースはありますし、そのようなケースにおいてプロトタイプベース OO のメモリ効率が良いというのは当然なわけです。

 問題は、そのようなケースがどの程度あるか、であり、リアルワールドなアプリケーションにおいて、どれだけメモリ効率が良いランタイムを (どれだけ容易に) 実装できるか、という話をしないといけないのだと思います。この点については、組込系ウェブブラウザの開発者として、とても興味をひかれます。

注: Host オブジェクトとして実装されているかもしれなけど

投稿者 kazuho : 2006年10月20日 04:31 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/842

このリストは、次のエントリーを参照しています: re: javascript vs perl - オブジェクトのメモリー効率:

» メモリー効率は所詮実装次第 from 404 Blog Not Found
そう。まさにこれを言いたかった訳です。 Kazuho@Cybozu Labs: re: javascript vs perl - オブジェクトのメモリー... [続きを読む]

トラックバック時刻: 2006年10月20日 10:56