だんなだんな、20XX年を待たずとも、それってもうPugsでできまっせ。

chimera Matzにっき(2006-11-27)
プログラミング言語も超メニーコアの時代になって、 1PCに65536個くらいCPUが載るようになると 並列性を人間に取り扱える形で(つまり、あまり見せないように)、 取り扱える言語が求められるようになり、 FORTRANのベクトル化技術に類似するものが復権して スクリプト言語を含めて広く利用されるようになる。

Matzさんならもうご存じだったとは思うのですが。

On MacBook Pro (dual core)
% /usr/bin/time pugs -e '(1..100000).>>sqrt'
        9.27 real         9.09 user         0.13 sys
% env GHCRTS=-N2 /usr/bin/time pugs -e '(1..100000).>>sqrt'
        5.79 real         6.92 user         0.15 sys
% /usr/bin/time pugs -e '(1..100000)>>*<<(1..100000)'
       13.96 real        13.54 user         0.28 sys
% env GHCRTS=-N2 /usr/bin/time pugs -e '(1..100000)>>*<<(1..100000)'
        9.59 real        10.74 user         0.35 sys

もっとも、mapはまだ対応してなかったりします。

% /usr/bin/time pugs -e '(1..100000).map:{sqrt $_}'
       54.04 real        53.52 user         0.33 sys
% env GHCRTS=-N2 /usr/bin/time pugs -e '(1..100000).map:{sqrt $_}'
       53.75 real        53.21 user         0.35 sys

とはいえ、mapで出来る事は、全部Hyperoperatorでも出来るので、ご利益を得るのは簡単です。

% /usr/bin/time pugs -e 'sub sq($x){ $x**2 }; (1..100000).>>sq'
       40.78 real        40.31 user         0.35 sys
% env GHCRTS=-N2 /usr/bin/time pugs -e 'sub sq($x){ $x**2 }; (1..100000).>>sq'
       23.76 real        30.80 user         0.40 sys

まあ今のところは、Pugs自体が他と比べると笑っちゃうほど遅い子ではあるのですが。

% /usr/bin/time perl -e 'map { sqrt $_ } (1..100000)'
        0.06 real         0.05 user         0.01 sys
% /usr/bin/time ruby -e '(1..100000).map{|x| Math.sqrt $x.to_f }'
        0.13 real         0.12 user         0.00 sys

でも、やっぱかわいい子だよな、Pugsって。飼い主も。

See Also:

Dan the Parallel Procrastinator