« 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