カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
ふと気になってRuby 製ウェブアプリをリストアップしています。ぱっと思いつくのってあまりないものですねえ。しかし、Wiki クローンが多いですね。引き続きちまちま追加していきます。
といいつつ rails を仕事で運用する予定はなかったりしますが。ま、プライベートで使っているアプリに使ってみようと思います。
といっていたわけですが、こっそり仕事で使ってみました。場合によっては道具を選べるのはうちの会社の良い点かもしれません……
素の CGI で書いても数十行でできるような小さなプログラムですけども勉強がてら。本当は SwitchTower でデプロイ自動化してバグ修正が楽々な環境を構築したかったのですが、ssh/svn を開発/サービス環境間で使えないため断念しました。
感心したのが page cache です。単純な仕組みながら効果的。サービスを提供する際にまず第一に負荷を気にするため(今回のアプリでは全然気にするものではありませんでしたが)、「静的に生成するか動的に生成するか」が設計の分かれ道だったりします。cache のおかげで、とりあえずどのページも同様に作っておいて静的で構わない部分だけ後から cache を適用することができて楽ですね。
もっと大規模なウェブアプリを rails で作ってみたいですね。これはやはり趣味でかな。
さて、なんとも信じられないことに、YARV で open-uri が動いた。
おおっと反応しつつ、でもまだ実用レベルではないと思ってみたりもします。そんな興味は持っているものの ML に参加したりせずお客さんな立場の私としては、「ruby1.9 を使うくらいの気持ちで使えるのはいつだろうか」が気になります。
もちろん実用レベルになるのはいつかなんてわからないと思いますが、何らかの指針があるとわくわくして待てるのになと思います(待ってるだけかい)。例えば GNU 版 Java 実装の GCJ には GCJ Status があって、どの程度の実装が完了しているかが把握できます。
言語のコア部分の実装の完成度は、(GCJ Status のような) API の実装の完成度のように分りやすく示すことは難しいと思います。が、yarv 開発の動きをより見えるようにすれば、より周囲から反応を得られるようになるのではと思います。
うーん。読み返してみると、勝手な言い草な気がしてきた。すみません。
http://i.loveruby.net/autobuild/yarv/
現時点で YARV には Ruby の test/ruby + rubicon の一部 + 自前テストが入っていて、 Ruby の仕様はほぼすべてカバーしてます。つまり、このグラフの赤色・黄色がなくなればほぼ Ruby 1.9 に追い付いたことになります。
なるほど。ありがとうございます。おお、何気にほとんど青ですね。
Rubyに移植したTropyのスクリプト(Tropy in Ruby)を公開します。
わーい。結城さんが Ruby プログラムを書いてる。せっかくですので、TODO にあるうちの Refine Database class を少しお手伝いします。Tropy::Database に対して以下の書き換えをしました。
def initialize(file)
super
transaction do
self[:index] ||= []
end
end
def random_id
transaction do
self[:index][rand(self[:index].length)]
end
end
def create_id
sprintf('%08d', rand(10 ** 8))
end
def add_id(id)
self[:index] << id if unique?(id)
end
def delete_id(id)
self[:index].delete(id)
end
def unique?(id)
not self[:index].index(id)
end
簡潔といいつつ random_id が読みにくいですね。
rails と yarv という Ruby 界の二大キラーが競演できたら素晴らしかろうと、動作の確認をちょっとしてみました。rails の手前の rubygems で落ちました。とりえあず再現する最小のコードをメモっておきます。
./miniruby -e '
> loop do
> begin
> {}
> ensure
> noop = nil
> end
> end
> '
DBG> : noop
DBG> : ":0:in `initialize'"
DBG> : ":0:in `initialize'"
-- stack frame ------------
0x2ad4a008 (0000): 00000001
0x2ad4a00c (0001): 00000001
0x2ad4a010 (0002): 00000001 <- lfp <- dfp
-- control frame ----------
c:0004 p:-001 s:0003 b:0003 l:0002 d:0002 CFUNC i:initialize s: -
c:0003 p:-001 s:0002 b:0002 l:0001 d:0001 CFUNC i:initialize s: -
c:0002 p:-001 s:0001 b:0001 l:0000 d:0000 CFUNC i:initialize s: -
c:0001 p:-001 s:0000 b:-001 l:0000 d:0000 ------ i:- s: -
---------------------------
[BUG] NODE_DASGN_CURR, but lv == 1 (line: 6)
ruby 1.9.0 (2006-02-14) [i686-linux]
アボートしました
ruby2.0 の VM 予定である YARV の完成度が高まっており、rails が動作したとの報告もあります。
YARV 0.3.0 がリリースされたときに引き続いて、Computer Language Shootout のいくつかのベンチマークプログラムについて、以下の処理系で time をとってみました。
Linux version 2.4.26-gentoo-r9 $ ruby18 -v ruby 1.8.4 (2005-12-24) [i686-linux] $ ./yarv -v ruby 1.9.0 (2006-02-14) [i686-linux] YARVCore 0.3.3 (rev: 453) [opts: ] $ ./yarv-opt -v ruby 1.9.0 (2006-02-14) [i686-linux] YARVCore 0.3.3 (rev: 453) [opts: [direct threaded code] [optimize basic operation] [stack caching] [operands unification] [instructions unification] [inline method cache] [block inlining] ] $ perl -v This is perl, v5.8.7 built for i686-linux
コンパイルオプションはどれも CFLAGS="-O2 -march=athlon-xp -pipe -fomit-frame-pointer" です。
では早速結果を。一番速かったものを赤字にしています。
| 処理系 | binarytrees | 比 | mandelbrot | 比 | nsieve | 比 | nsieve-bits | 比 | nbody | 比 | fannkuch | 比 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ruby 1.8.4 | 346.398s | 1.00 | 109.203s | 1.00 | 80.918s | 1.00 | 180.942s | 1.00 | 460.031s | 1.00 | 359.573s | 1.00 |
| YARV rev453 | 220.196s | 0.64 | 61.439s | 0.56 | 39.964s | 0.49 | 69.387s | 0.38 | 239.649s | 0.52 | 299.175s | 0.83 |
| YARV rev453(最適化) | 502.971s | 1.45 | 32.127s | 0.29 | 32.562s | 0.40 | 56.513s | 0.31 | 234.752s | 0.51 | 268.312s | 0.75 |
| perl 5.8.7 | 333.649s | 0.96 | 32.653s | 0.30 | 48.932s | 0.60 | 40.589s | 0.22 | 328.495s | 0.71 | 281.067s | 0.78 |
最適化オプションをたっぷりつけた YARV ですと binarytrees が遅くなるという現象がありましたが、perl といい勝負になっていますね(というかうちの環境だと perl が遅い?)。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
Before...
_ だて [そうですね。ML に参加したいと思います。と思ったら atdot.net に繋がらないようですので、後ほど。。。]
_ だて [む。時刻がまたずれてる。]
_ ささだ [なんか学科のネットワークが落ちてるらしく。 とりあえずパッチです。 === compile.c ========..]
_ だて [最小コードではちゃんと動くようになりました。あとでrubygemsでも試してみます。次から報告はMLにしますね。]