[#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:24574] Re: [Bug #1711] Marshal Failing to Round-Trip Certain Recurisve Data Structures

From: Yukihiro Matsumoto <matz@...>
Date: 2009-07-27 13:14:50 UTC
List: ruby-core #24574
Hi,

In message "Re: [ruby-core:24105] [Bug #1711] Marshal Failing to Round-Trip Certain Recurisve Data Structures"
    on Thu, 2 Jul 2009 02:30:15 +0900, Run Paint Run Run <redmine@ruby-lang.org> writes:

|I have attached a script that fails to round-trip a recursive data structure on 1.9, but succeeds on 1.8. IOW, it prints true on 1.8; false on 1.9. I haven't been able to reduce it further because I'm unfamiliar with Marshal.

1.9 Marshal.load with proc is incompatible with 1.8, as following:

  * 1.8 load ignores the value returned from proc, whereas 1.9 load
    replaces the object by the value from proc.

  * 1.9 load calls proc for recursively visited data.  1.8 dump only
    calls proc once.

That is to allow rebuilding loading data using proc.  For
the example in [ruby-core:24361], replacing 

 myproc = Proc.new { |o| arr << o }

by

 myproc = Proc.new { |o| arr << o; o }

should work as expected.  The future action would be either:

 (a) the new 1.9 behavior has meaning.  since virtually no one uses
     Marshal.load with proc, it's OK to change it for a good reason.

 (b) incompatibility is bad.  should be reverted to the original 1.8
     behavior.

 (c) or probably add another optional (or keyword) argument to enable
     the new behavior, keeping the old behavior by default.

Any opinion?

							matz.

In This Thread