kiyoka.2010_04_17 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2010_04 Nendo.DONE
554444553555555555555555555555555555555555555555555555555555555555555555555555555215
5

[JRuby][Ruby] CRuby-1.9.1とJRuby 1.5.0-RC1の挙動の違いを発見

5

JRubyのバグかなとTwitterでつぶやいたら、@hiro_asariEXTさんから、どんな内容か教えて下さいと返信もらったので、これはその説明用エントリです。@hiro_asariEXTさんありがとうございます。

4
 Twitter / Hiro Asari: @kiyoka JRubyで1.9相当の挙動を促すに ...EXT
4
 @kiyoka JRubyで1.9相当の挙動を促すには--1.9というフラグが必要です。そ
4
 れでも違う場合には、どのような物か提示してもらえれば調査してみます。
4

 

5

このあたり、Ruby処理系間の仕様の調整(RubySpecとかあるけど)のノウハウが無いので、後は@hiro_asariEXTさんにお願いできればと思います。

5

仕様がちょっと違うというだけのバグなので、JRubyの中身を知っている人ならスグに直せそうな問題です。(JRuby側を合わせるとしたらですが...)

3

それから、本ブログからソースコードをコピペする場合は、ページタイトル右横の[PLAIN TEXT]アイコンで本ページのTEXT版が出てきます。その方法を試してみて下さい。

5

 

5

現象

5

次のメソッドの返す型が違う。

5

CRubyはシンボルの配列を返し、JRubyは文字列の配列を返す。

5
global_variables
5
instance_variables
5
local_variables
5

 

5

class_variablesだけは両方の処理系でシンボルの配列を返す。

5

 

5

実験結果

5

 

5

実験用ソースコード print_variables.rb

5
# -*- encoding: utf-8 -*-
5
5
$global_var1 = 1
5
$global_var2 = 2
5
5
class A
5
  @@class_var1 = 1
5
  @@class_var2 = 2
5
  def initialize
5
    @instance_var1 = 1
5
    @instance_var2 = 2
5
  end
5
5
  def view_variables
5
    local_var1 = 1
5
    local_var2 = 2
5
5
    print "global_variables:\n  "
5
    p global_variables
5
    print "class_variables:\n  "
5
    p A.class_variables
5
    print "instance_variables:\n  "
5
    p self.instance_variables
5
    print "local_variables:\n  "
5
    p local_variables
5
  end
5
end
5
5
a = A.new
5
a.view_variables
5

 

5

JRubyの挙動

5
$ jruby --1.9 --version
5
jruby 1.5.0.RC1 (ruby 1.9.2dev trunk 24787) (2010-04-14 0b08bc7) (Java HotSpot(TM) Client VM 1.5.0_22) [ppc-java]
5
$ jruby --1.9 print_variables.rb 
5
global_variables:
5
  ["$$", "$`", "$@", "$\\", "$<", "$=", "$!", "$.", "$;", "$&", "$\"", "$'", "$,", "$+", "$>", "$:", "$/", "$~", "$0", "$_", "$*", "$?", "$-n", "$-I", "$-p", "$global_var1", "$-a", "$-l", "$global_var2", "$-d", "$-K", "$stderr", "$stdout", "$LOAD_PATH", "$SAFE", "$FILENAME", "$stdin", "$VERBOSE", "$LOADED_FEATURES", "$deferr", "$defout", "$PROGRAM_NAME", "$KCODE", "$DEBUG"]
5
class_variables:
5
  [:@@class_var1, :@@class_var2]
5
instance_variables:
5
  ["@instance_var2", "@instance_var1"]
5
local_variables:
5
  ["local_var1", "local_var2"]
5

 

5

CRubyの挙動

5
$ ruby --version
5
ruby 1.9.1p376 (2009-12-07 revision 26041) [powerpc-darwin9.8.0]
5
$ ruby print_variables.rb 
5
global_variables:
5
  [:$;, :$-F, :$@, :$!, :$SAFE, :$~, :$&, :$`, :$', :$+, :$=, :$KCODE, :$-K, :$,, :$/, :$-0, :$\, :$_, :$stdin, :$stdout, :$stderr, :$>, :$<, :$., :$FILENAME, :$-i, :$*, :$?, :$$, :$:, :$-I, :$LOAD_PATH, :$", :$LOADED_FEATURES, :$VERBOSE, :$-v, :$-w, :$-W, :$DEBUG, :$-d, :$0, :$PROGRAM_NAME, :$global_var1, :$global_var2, :$-p, :$-l, :$-a, :$1, :$2, :$3, :$4, :$5, :$6, :$7, :$8, :$9]
5
class_variables:
5
  [:@@class_var1, :@@class_var2]
5
instance_variables:
5
  [:@instance_var1, :@instance_var2]
5
local_variables:
5
  [:local_var1, :local_var2]
5

 

5

今回初めてTwitterが有効活用されそうな予感です。

5

 

2

COMMENTあさり

念の為に追記しておきますと、http://twitter.com/hiro_asari/status/12359856172 に書きました通り、この点は http://bit.ly/acyiqv で対処しました。ご報告に感謝します。

1

COMMENTkiyoka

あさりさん、すばやい対処ありがとうございます。お役に立ててなによりです。

CRuby1.9互換競争で、JRubyがトップを走ってそうですね。

また何か見つけたら報告します。

5

...comment disabled...