[#24105] [Bug #1711] Marshal Failing to Round-Trip Certain Recurisve Data Structures — Run Paint Run Run <redmine@...>

Bug #1711: Marshal Failing to Round-Trip Certain Recurisve Data Structures

9 messages 2009/07/01

[#24116] [Bug #1715] Numeric#arg for NaN is Inconsistent Across Versions — Run Paint Run Run <redmine@...>

Bug #1715: Numeric#arg for NaN is Inconsistent Across Versions

10 messages 2009/07/02

[#24240] [Bug #1755] IO#reopen Doesn't Fully Associate with Given Stream on 1.9; Ignores pos on 1.8 — Run Paint Run Run <redmine@...>

Bug #1755: IO#reopen Doesn't Fully Associate with Given Stream on 1.9; Ignores pos on 1.8

8 messages 2009/07/09

[#24321] [Bug #1773] Gem path doesn't honor user gem? — Lin Jen-Shin <redmine@...>

Bug #1773: Gem path doesn't honor user gem?

12 messages 2009/07/14

[#24390] [Feature #1784] More encoding (Big5 series) support? — Lin Jen-Shin <redmine@...>

Feature #1784: More encoding (Big5 series) support?

12 messages 2009/07/16

[#24467] Re: [ruby-cvs:31226] Ruby:r24008 (ruby_1_8_6): Removed private on to_date and to_datetime. — Urabe Shyouhei <shyouhei@...>

Hello.

10 messages 2009/07/21

[#24472] [Feature #1800] rubygems can replace system executable files — Kazuhiro NISHIYAMA <redmine@...>

Feature #1800: rubygems can replace system executable files

13 messages 2009/07/21

[#24530] [Feature #1811] Default BasicSocket.do_not_reverse_lookup to true — Roger Pack <redmine@...>

Feature #1811: Default BasicSocket.do_not_reverse_lookup to true

9 messages 2009/07/23

[#24624] [Bug #1844] Immediates Should Not Respond to :dup — Run Paint Run Run <redmine@...>

Bug #1844: Immediates Should Not Respond to :dup

15 messages 2009/07/30

[ruby-core:24415] Constant lookup in class eval (appeal)

From: Yehuda Katz <wycats@...>
Date: 2009-07-18 03:19:17 UTC
List: ruby-core #24415
Matz,
One of the biggest breaking changes in Ruby 1.9 is the change in constant
lookup inside a proc that is *_eval'ed.

For instance,

*1.8*
*
*
class Foo
  class Bar
  end
  def evaluate(&blk) instance_eval(&blk) end
end

Foo.new.evaluate { Bar }
NameError: uninitialized constant Bar

*1.9*

class Foo
  class Bar
  end

  def evaluate(&blk) instance_eval(&blk) end
end

Foo.new.evaluate { Bar }
=> Foo::Bar


The 1.9 behavior is understandable if everything is in one file. However, in
the normal case, instance_eval is used to implement DSLs. For instance,
rspec has the following semantics:

module RubyFun
  class Foo
  end

  describe ("Foo") do
    it("exists") do
      lambda { Foo }.should_not raise_error
    end
  end
dnc

This test passes in 1.8 but not in 1.9 because of the change in behavior. It
also clearly articulates the *reason* for the 1.8 behavior: it is more the
expected behavior. One of the things that's great about Ruby is that it
focuses on programmer understanding, even if that is sometimes slow. This is
a case where the programmer expects to see a constant but it is being looked
up somewhere the programmer knows nothing about. I think it is clear that
the old behavior is better, even if it is harder to implement. Additionally,
both JRuby and Rubinius were able to implement the old behavior in a
compiled system, so it should be possible.

Thanks for your time.

-- 
Yehuda Katz
Developer | Engine Yard
(ph) 718.877.1325

In This Thread

Prev Next