そう。まさにこれを言いたかった訳です。

Kazuho@Cybozu Labs: re: javascript vs perl - オブジェクトのメモリー効率
言語仕様のメモリ効率性を考えるのにあたって、(メモリの潤沢な環境向けの) 特定の実装間の比較をしても意味がないと思います。

実はこの場合でも(2)だけではなく(2)-(1)の結果を見ると、私の手元では

defval
        js      3348
        pl      2680
[FreeBSD]

とperlの方がよいという結果が出ちゃいましたが、それはさておき、この場合でもPerlは以下の工夫を施すことによりさらにメモリー効率を上げることができます。

defval.pl2
#! /usr/bin/perl
use strict;
use warnings;
package Thingy;

sub new{ bless {}, shift };
sub bool{ my $self = shift; $self->{bool} = shift if @_; $self->{bool} || 0 }
sub num{ my $self = shift; $self->{num} = shift if @_; $self->{num} || 0  }
sub str{ my $self = shift; $self->{str} = shift if @_; $self->{str} || '' }
sub ary{ my $self = shift; $self->{ary} = shift if @_; $self->{ary} || [] }
sub obj{ my $self = shift; $self->{obj} = shift if @_; $self->{obj} || {} }

package main;
my @thingies;
for (my $i = 0; $i < 10000; $i++) {
    $thingies[$i] = Thingy->new();
    $thingies[$i]->num($i);
}
1 while 1;
        pl2     1472

むしろ、Perlの方に注目すると、この例はClassical Object Modelがむしろメモリー節約に役立った例と言えるでしょう。

しかし、ここで言いたいのはBenchmarkのよしあし、ということではなく、OOの場合、メモリー効率というのはObject Modelではなく実装次第ということなのです。OOの実装がユーザーに任されているPerl 5だと、このように難しいことをしなくてもそれがよく見えます。

だから、JavascriptがPrototypal Object Modelを採用したのは、少なくともメモリー効率のためではありますまい。実際パソコン用ブラウザーというのは、普通の人が使用する上では、現在に最もメモリーを多く費消するアプリケーションで、ただ立ち上がっているだけで40MBもってきますし、使っているうちに1GBを超えちゃうこともしばしばです。extensionをたくさん入れている人はもっとでしょう。

404 Blog Not Found:javascript vs perl - オブジェクトのメモリー効率-Tetsさんのコメント
ところで、Danさんはjavascriptがなぜプロトタイプベースのオブジェクト指向言語になったんだと思いますか?

これに対する答は是非機会があればBrendan Eichあたりにインタビューしたいところですが、下司なりに勘ぐってみると、「納期」なのかも知れません。

当時彼が抱えていた課題は、「Javaに見た目が似ている、ブラウザーを制御するための言語を開発せよ」だったはずです。Cに対するcshみたいなものですね。しかし大事なのは「ブラウザーを制御する」の部分です。今はとにかく当時はあくまでブラウザーが主で、言語は従だったはずです。しかも当時はNetscapeは一営利企業。納期のプレッシャーは今のオープンソースベースの開発の比ではなかったはずです。

こんなとき、あなたならどうするでしょう?

新言語にきれいにフィットするようにブラウザーのソースまでrefactorするでしょうか?

それよりむしろ、そこにあったブラウザーのソースの改変を最小限に留めるような言語仕様にするはずです。

それの傍証としては、document objectの迷走があります。DOM以前と以後ではまるで違うのですから。

一番のキーであるオブジェクト、document(の内部実装)がClassicalなOOにフィットしていたとはとても言えない。かといって、windowだけならとにかくdocumentまでいじくりたいのでOOは絶対採用したい。そこで出た解決策が、Prototypalな実装だったのではないでしょうか。

Dan the Javascripting Perl Monger