トップ «前の日記(2009-02-18) 最新 次の日記(2009-02-22)» 編集

Route 477



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 ユーザリファレンス」は神

本日のツッコミ(全1件) [ツッコミを入れる]
ay (2009-02-20 12:30)

ruby1.9_1.9.1.0-1はupload済みなのですが、パッケージ構成の関係で一週間ばかり待ち状態です。(uploadはlenny以前だったのでexperimental送りにしてたりします。)