2009-02-19
■ [ruby] 1.8と1.9を共存させる方法
Linuxなら
sudo aptitude install ruby1.8 sudo aptitude install ruby1.9
Mac OS Xなら
sudo port install ruby sudo port install ruby19
ーーーーー終了ーーーーーー
…と言いたいところだがaptのruby1.9はよく見たらまだ1.9.0だし(いずれ1.9.1になると思うけど)、せっかくだから自前でコンパイルする方法を ここでは紹介する。
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.bz2 $ tar xvf ruby-1.9.1-p0.tar.bz2 $ cd ruby-1.9.1-p0 $ ./configure --prefix=/home/yhara/bin/rubys/ruby-1.9.1-p0/(のような、どこか好きなところ) --program-suffix=-1.9.1-p0 (のような、好きな接尾辞) $ make # make install
のような感じです。
--program-suffixがポイントで、これを付けておくとインストールされるコマンドの名前が「ruby」や「gem」などの代わりに、 「ruby-1.9.1-p0」「gem-1.9.1-p0」などの名前になるので、あとはインストール先のbin/以下にパスを通せば1.8と1.9が共存する環境のできあがり。
■ [scheme] SchemeでAObench
AO benchという、レンダリングのベンチマークをGaucheで動かしてみました。 .mjtさんのypsilon版の、Gaucheへの移植です。
(3/5追記:模範解答キター!26秒とかwww)
元のypsilon版が523秒で、とりあえず動くようにしたバージョンが946秒で、そこからベクタ関係の関数がgauche.uvectorのにマクロ展開されるように したりなどして307秒になった。
まあRubyより速くて、Pythonより遅いかんじで、そんなもんかなと。
つーかCommon Lisp版が34秒とかwwwはええよwww
なんか超えられない壁を感じました。あとProcessingも速い。
ソース
Gauche専用です。
aoの方は.mjtさんのやつをちょっといじっただけです。
ptの方は.mjtさんのやつを見ながらスクラッチで移植しました(一気に書いたら3箇所間違えててデバッグにすげー苦労した)。 30分とか45分とかかかります。注意。
高速化とか
もっと速くなんねーかなー。いや、なるだろ、俺のScheme力的に考えて。
とりあえず
gosh -p time hoge.scm
でプロファイルがとれることは分かった。 が、f64vector-refが一番多いよと言われても「ですよねー」としか (yharaさんはパフォーマンスチューニングに関しては全くの素人です)
vcross(ベクトルの外積) をf64vector-* で書き直せたら効果がありそうなんだが。
(define (vcross a b) (vec (- (* (vy a) (vz b)) (* (vy b) (vz a))) (- (* (vz a) (vx b)) (* (vz b) (vx a))) (- (* (vx a) (vy b)) (* (vx b) (vy a)))))
あとはクラスを使わないとかになるのかなぁ。
追記
「インクリメンタルサーチ対応 Gauche ユーザリファレンス」は神
ruby1.9_1.9.1.0-1はupload済みなのですが、パッケージ構成の関係で一週間ばかり待ち状態です。(uploadはlenny以前だったのでexperimental送りにしてたりします。)