论坛首页 Ruby版

JRuby 1.0的一个严重的bug

浏览 2467 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-07-15 关键字: JRuby
if "string"
  puts "true"
else
  puts "false"
end

很简单的代码,在CRuby和JRuby中运行得到了不同的结果。

保存为test.rb,分别使用CRuby和JRuby运行:

ruby test.rb
test.rb:5: warning: string literal in condition
true

jruby test.rb
false

CRuby版本:ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
JRuby版本:ruby 1.8.5 (2007-06-07 rev 3841) [x86-jruby1.0]

因为《Ruby for Rails中文版》中说字符串求值结果为true,而在JRuby中却得到false。

虽说是JRuby 1.0的一个很弱智的bug,不过这也暴露出一个问题,就是Ruby应该尽早出一个语言的规范了。
   
时间:2007-07-15
这个应该很明确了吧,ruby里只有false和nil为'假'
   
0 请登录后投票
时间:2007-07-15
寒。。。groovy也是true的,这个JRuby的确很弱智。。。
难道是按照java的规范来写的??
   
0 请登录后投票
时间:2007-07-16
确实这是一个bug,因为这里是字符串,所以和正则表达式匹配有些弄混了。从代码中解析出来的结果,不是当作一个字符串,而是要做一次匹配,估计是parser的问题。
我已经替你将这个bug发到JRuby的开发邮件列表中了,相信很快他们就会改过来。
   
0 请登录后投票
时间:2007-07-16
一直有个疑问:
JRuby单纯解释执行Ruby代码,速度怎么可能比CRuby快?
   
0 请登录后投票
时间:2007-07-16
hideto 写道
一直有个疑问:
JRuby单纯解释执行Ruby代码,速度怎么可能比CRuby快?

因为有JVM提供JIT
   
0 请登录后投票
时间:2007-07-17
Thomas Enebo已经解决了这个问题,下一个发行版中应该就没有这个问题了。如果急需,可以考虑直接从SVN上拿最新版本。

hideto 写道
一直有个疑问:
JRuby单纯解释执行Ruby代码,速度怎么可能比CRuby快?


因为JRuby已经支持了部分代码的编译。JRuby号称提供了JIT,实际上,编译多次运行的代码。编译的工作本质上和XRuby一样。但是,JRuby对编译的支持并不完整,对于那些无法编译的部分,依然采用解释的方式执行。所以,对于某些代码,JRuby可以运行得很快,而对于很多代码,它的性能还是上不来。
   
0 请登录后投票
时间:2007-07-17
dreamhead 写道
Thomas Enebo已经解决了这个问题,下一个发行版中应该就没有这个问题了。如果急需,可以考虑直接从SVN上拿最新版本。

多谢。暂时也不是很急需。

用JRuby运行一些应用,常常会发现一些奇怪的现象,而在CRuby上运行完全不存在。我前一段时间测试Beast的时候,一进入用户列表页面,JRuby就报错,而在CRuby上完全没有问题。

我还会坚持使用JRuby,如果发现了新的问题,再到这里来讨论。
   
0 请登录后投票
时间:2007-07-17
dlee 写道
用JRuby运行一些应用,常常会发现一些奇怪的现象,而在CRuby上运行完全不存在。我前一段时间测试Beast的时候,一进入用户列表页面,JRuby就报错,而在CRuby上完全没有问题。

因为JRuby并不完全兼容C Ruby,所以,有一些问题是正常的。

dlee 写道
我还会坚持使用JRuby,如果发现了新的问题,再到这里来讨论。

我倒是觉得如果你发现问题,最好还是报告到JRuby的邮件列表或者JIRA中。仅仅报告在这里,问题是无法得到解决的。
   
0 请登录后投票
时间:2007-07-17
dreamhead 写道
我倒是觉得如果你发现问题,最好还是报告到JRuby的邮件列表或者JIRA中。仅仅报告在这里,问题是无法得到解决的。

两边都会说的,呵呵。只发到JIRA中,这里也不会有人知道。
   
0 请登录后投票
论坛首页 Ruby版

跳转论坛:
JavaEye推荐