青木です。

ruby-dev summary は何やってんのかよくわからん、という声がある
ようなので、試験的に ruby-list でいつもの作業をやってみようと
思います。ここで流す分は草稿なので、間違っているところや、英語と
しておかしいところなどは指摘してくださると助かります。

では以下 ruby-dev summary の今週分 21403-21530 です。
今週はなんとなく日本語の意訳を付けてみました。


[ruby-dev:21416] return value of #warn

  -W0 のとき warn が不定値を返すバグの報告。
  そこから派生して warn の返り値の話になり、
  結果として常に nil を返すことになった。

  In current 1.8, #warn returns its argument.  U.Nakamura
  reported that #warn returns undetermined value on -W0.
  This bug is fixed and return value is changed to nil.

[ruby-dev:21176] marshalling ivtbl of Time

  Marshal の手続きに関する話題。

  少し前の 1.8 では _dump か marshal_dump が定義されているとイン
  スタンス変数はダンプされなかった。一方 Time には _dump が定義
  されているので、Time オブジェクトのインスタンス変数はダンプさ
  れないことになる。

  In old 1.8, ruby did not dump instance variables if #_dump or
  #marshal_dump is defined.  Almost all built-in classes do not
  have #_dump/#marshal_dump, but Time has #_dump method.  So
  instance variables of Time objects do not dumped. e.g.

    % ruby -e '
        t = Time.now
        t.instance_eval { @ivar = 3 }
        Marshal.load(Marshal.dump(t)).instance_eval { p @ivar }
    '
    nil

  そこで _dump や marshal_dump が定義されていてもインスタンス変数
  は自動的にダンプするように変更された。しかしそれだけでは、IO の
  ようにシリアライズ不可能なオブジェクトがインスタンス変数に入っ
  ているとエラーになってしまう。そこで、

    * _dump か marshal_dump が定義されており
    * インスタンス変数にシリアライズ不可能なオブジェクトが代入されている

  場合はエラーではなく無視するようになった。詳しくは以下の実行例
  を参照のこと。

  Matz decided to dump/restore instance variables automatically,
  even if #_dump/#marshal_dump is defined.  But it causes needless
  errors when trying to dump unserializable objects, e.g. IO.
  Then if an object has #_dump/#marshal_dump and meets unserializable
  objects, ruby does not raise exception, just ignore it.  See
  following example for changes.

    % cat marshal_io
    class C
      def initialize
	@io = STDIN
	@n = 99
      end
      def marshal_dump
	3
      end
      def marshal_load( obj )
	@io = STDIN
      end
    end
    c = C.new
    p c
    p Marshal.load(Marshal.dump(c))

    % ruby-1.8.0 marshal_io
    #<C:0x401ace1c @io=#<IO:0x401b3280>, @n=99>
    #<C:0x401accc8 @io=#<IO:0x401b3280>>      # @n is not restored

    % ruby-HEAD marshal_io
    #<C:0x40270e1c @n=99, @io=#<IO:0x40277294>>
    #<C:0x40270cc8 @n=99, @io=#<IO:0x40277294>>

[ruby-dev:21498] {test,lib}/ChangeLog?

  現在は test/ や lib/ のログも全部まとめてトップの ChangeLog に
  書いているが、これを分けるべきかどうかについて。まつもとさん・
  新井さん・なひさん・青木はこのまままとめる派。(いまのとこ
  バラバラ派はなし)

  We are writing all change logs in one file now, ChangeLog.  But
  there are other schemes to store change log  e.g. one file per
  one directory.  NAKAMURA Hiroshi asked where we should write a
  log of test scripts.

  Matz replied he prefers to use one big ChangeLog file.

[ruby-dev:21508] eval BEGIN/END at runtime

  eval 中での BEGIN/END ブロックの仕様についての質問。
  BEGIN が eval の最初に実行されるのに対して END は実行全体の
  最後の実行されるが、これが適切であるかどうか。

  → 仕様です。

  NAKAMURA Hiroshi asked about feature of BEGIN/END block.
  See following script:

    eval 'BEGIN { puts "begin" }
          END { puts "end" }'
    puts '----'

  Ruby prints "begin", "----", then "end".  So, when we execute
  BEGIN/END in eval, BEGIN block is executed at beginning of eval,
  END block is executed at end of ruby process.

  Matz replied this is a feature.