航海日誌

トップ «前の日記(2007-06-11) 最新 次の日記(2007-06-13)» 編集
過去の日記
注意:

2007-06-12 [長年日記]

O [Ruby] Rubyあいしてるよ〜

ログだけでも伝わってくる:-)。

裸足で壇上を歩きまわるDave。

:-)

O [Java][Ruby] JRuby 1.0ベンチマーク(fib(30).rb)

正直言うと,全般的にJRubyが遅いですね:-).まぁそういってもフィボナッチ数のベンチマークはJRubyが速くなるんですよ.

Windows 2000 SP4, Java SE SDK 1.6.0, Pentium 4 2.56GHzというスペックで計測.JRubyはもちろん無印の1.0です.

st = Time.new
def fib(n)
  if n<2
    n
  else
    fib(n-2)+fib(n-1)
  end
end
print(fib(30), "\n")
en = Time.new
puts (en - st)
bash-3.1$ java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)
bash-3.1$ jruby fib.rb
832040
4.359
bash-3.1$ jruby -J-server fib.rb
832040
2.938
bash-3.1$ ruby -v
ruby 1.8.5 (2006-08-25) [i386-cygwin]
bash-3.1$ ruby fib.rb
832040
3.337

これでいいかな.-serverが卑怯だとか言わないで.もともとサーバーサイドなら有効オプションですから.

def fib(n)
  if n == 0 then
    0
  elsif n == 1 then
    1
  else
    fib(n-1)+fib(n-2)
  end
end
puts RUBY_VERSION
s = Time.new
p fib(30)
p Time.new - s
bash-3.1$ jruby fib2.rb
1.8.5
832040
6.906000000000001
bash-3.1$ jruby -J-server fib2.rb
1.8.5
832040
3.141
bash-3.1$ ruby fib2.rb
1.8.5
832040
3.781

追記: Athlon 64 X2 3800+の場合

C:\jruby-1.0>bin\jruby \fib.rb
832040
2.563
C:\jruby-1.0>bin\jruby -J-server \fib.rb
832040
2.062
C:\jruby-1.0>ruby \fib.rb
832040
2.875

この場合は,-serverオプションなしでもJRubyが速いようです.

Mac OS Xの場合は,Java SDKのバージョンが低いですし,そういうのが影響してるんじゃないでしょうか.

追記2: フィボナッチ数のベンチマークが速いからどうこういうつもりはありません.このベンチマークは非常に小さく,ベンチマークとしては偏りすぎています.さらにYARVが有効な1.9系統ではJRubyよりも(かなり)速いのですから.

しかしこのベンチから思うのは,

  • JRubyはまだポテンシャルを持っていて,将来はもっと速くなるかもしれない
  • C Rubyと同じくらいのパフォーマンスではRuby実行環境の置き換えには向かないが,本家RubyではできないJavaとの連携がシームレスにできる

の2点です.特に2点目はかなり大きい意義だと思います(Rubyはrjbを始めとしていくつかブリッジがあるわけですが,一番シームレスに使えるのはJRubyそのものです).

O [日本] 常識とは言えないが,どっちの主張もわからんでもない

私も強制されるのは嫌だし常識とも思わないな.しかしそういう形式に拘る会社も未だに多いことも事実で,あとのごたごたを避けるために嫌々ながら連れてくる人もいるだろう.

まぁ1回だけということなら,別に従ってもいいんじゃないかという気もしないでもない.言い方が気に食わなかったのかもしれない.

とか書いたんだけど,回答と本人のコメントを読むと,そういう会社(あるいは部署)は辞めたほうがいいと思っちゃった.本気で常識だと思ってるんだね(^^;.

ただ,結婚した事実は会社に報告する必要があるかも.特に経理的にはいろいろ手続きが必要になってくるので,それも含めてなのかなぁという気がしないでも.

O [OSS][ソフト][インターネット] Safari 3 for Windowsへの本音

WebデザイナあるいはWebアプリ開発者は,

IE,Firefox,Safari(OS X),Operaだけで対応作業が大変なのに,Windows版まで出して仕事増やすんじゃねーよ

と思っているに違いない.

中途半端に対応し独自仕様満載のIE,CSS/JavaScriptが変態なSafari,比較的マシだがやはり他のブラウザと見栄えが違うFirefoxで,結構苦労しているはず.

特にCSSとJavaScriptの互換性のなさがWebデザイナ/アプリ開発者泣かせになってるのがなんともしがたい.というかなんとかしてくれ.

O [PC][ハード] ASUSTeK製ノートブックPC「Eee PC」触ってきました

もうちょっと情報が出てます.やはり欲しいです.一般向けも出す気アリアリのようです.

Webページの情報と違って,やはりSSDが2GBと出てますね.まぁこれが本当の情報なんでしょう.ということでnogさんごめんなさい.

ところで日本での入手ができるのかどうかですが,やはりASUSTeKの日本法人は現時点では販売しないようです.ただ輸入業者がどうせ乱入してくるでしょうから,心配しなくても入手できるでしょう.ただしASUSTeKが思っているよりも売れそうな感じなんで,入手しにくいと思います.

で何に使うかですが,やはりサーバ用途には向きません(あたりまえ).そうではなくて純水にフルスペックPCのPDAとして使うのが順当です.

CPUの性能はまぁいいとして,SSDが小さいのでアプリやデータはあまりおけませんが,外部スロットがあるようですし(最悪の場合はUSBメモリ),エディタ+コマンドラインで開発する程度なら十分な性能を発揮すると思うので,Hackツールとしても使えると思います.

O [Java] Javassistで動的にクラス生成

千葉センセイのアレですね.使おうかな.

O [Java][Ruby] JRubyはthread safeでない?

誰だよ、JRuby は並列実行サポートしてるって言った奴。

うほっ.

strがthread safeになってないんでしょうね.これわちょっとこわひ.

もしJava上で実行する場合はsynchronizedでブロックすることになるんじゃないかなと.JRubyだとMutexとか使うんじゃないのでしょうか.

とか言わずに手を動かせということで動かしてみる.

Windows 2000SP4, Pentium 4(Single core)で動かすと,

bash-3.1$ jruby ti.rb
"111...
4444...
4"
bash-3.1$

動いていますね.

では,Windows 2000SP4, Athlon 64 X2(Dual core)で動かすと,

C:\jruby-1.0>bin\jruby \ti.rb
System.java:-2:in `java.lang.System.arraycopy': java.lang.ArrayIndexOutOfBoundsException: null (NativeException)
...

出た出た.

require "thread"
m = Mutex.new
str = ''
max = 1000
(1..4).map{|e|
  Thread.new(e){|ti|
    max.times{
      m.synchronize {
        str << ti.to_s
      }
    }
  }
}.each{|t| t.join}
p str

これなら動く(^^;.Ruby的には変でもJava的には当然の挙動ともとれます.このへんどうなんですか > Ruby識者の方々

ただし,コンテキストスイッチの違いからか,Threadはもっと粒度が粗いというか,かなり違う挙動をします(これはしょうがないでしょう).ささださんもちょっと試して欲しいかも.

本日のツッコミ(全5件) [ツッコミを入れる]
O 向井 (2007-06-12 10:09)

有難うございます。 Mac というプラットフォーム的な問題はあるかなあと思っていましたが、 SDK のバージョンが古いってのはあんまり考えていませんでした。ありそうな話です。<br><br>こちらの方にご指摘いただいた test/fib.rb も試してみたのですが、けっきょく Mac では jruby の方が遥かに遅くなりました。そういう要因が絡んでくるのでしょう。<br><br>挙げられた2点についてはその通りだと思います。もともと散々「遅い」と言われてきた Ruby のことですから、ちょっとくらい遅くなっても、本当に問題視する人は少ないんじゃないかと思うんですよね(そりゃ速いにこしたことはないと思うんですが)

O keisuken (2007-06-12 11:17)

向井さん:<br>一番パフォーマンスで困るのは全部JavaでやろうとしてRuby on Railsが遅くて死ぬというケースでしょうね(^^;.<br>やはりMac OS Xだと結果が違うようですけど,そろそろJava6が出ると思うので,その頃はベンチマーク結果も変わるかもしれませんね.<br>> もともと散々「遅い」と言われてきた Ruby のことですから...<br>はい.さらにJRubyはつい最近まで本家よりも1桁以上遅かったので,それを思えば十分実用と言えると思います(^^;.

O ささだ (2007-06-13 07:39)

試す、とは何をでしょうか。<br><br>ちなみに、Mutexを使えば安心、というのは、Rubyでは許されないと以前まつもとさんに伺いました。それでよければ悩むことはあんまりないんですが。

O keisuken (2007-06-13 08:19)

ささださん:<br>> 試す、とは何をでしょうか。 <br>Mutex版で挙動をという意味ですが,気にならなければ別にいいと思います.<br>> Mutexを使えば安心、というのは、Rubyでは許されない<br>なるほど,これはJRubyチームとの意図のずれがあるんでしょうね.<br>ただこの手のオブジェクトに全部排他制御してしまうと,かなりパフォーマンスが落ちてしまう事が予想できるので,それはそれであまりうれしくありません.<br>起動時にオプションとかそうなっちゃうのかなぁ.

O ささだ (2007-06-13 12:04)

気にならなければ、というか、つけて動かないということはさすがに無いと思っています。<br><br>JRubyチームとの意図のずれは実はなくて、彼らはこれを直そうとしています。だから現状はバグが混ざっているという状態です。

[]

やること、い〜っぱい(´д`)。

トップ «前の日記(2007-06-11) 最新 次の日記(2007-06-13)» 編集