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

プログラミング言語も超メニーコアの時代になって、 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
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。