«前の日記(2004年03月17日) 最新 次の日記(2004年03月19日)» 編集

Matzにっき


2004年03月18日 [長年日記]

_ [Ruby]でばっぐ

しばらく忙しくてRubyをいじってなかったが、今日はちょっと作業できた。

やったこと。

  • object.c (Init_Object): remove Kernel#to_a.

    使うと警告が出ていたObject#to_aを削った。

  • eval.c: remove specialized version of rb_Array(). use simple one defined in object.c.

    Object#to_aを特別扱いしていたrb_Array()の定義を削って、 object.cにあるすなおな定義(ifdef outされていた)を使うようにした。

  • enum.c (enum_zip): use "to_a" instead of "to_ary".

    引数を配列に変換する時、to_aを使うようにした。

  • eval.c (proc_eq): avoid false positive by using scope and dyna_vars. no longer use frame.uniq.

    空Procが違う場所なのに==が真になるケースがあった。チェック条件をより正しく。

  • eval.c (proc_arity): arity is now defined as number of parameters that would not be ignored. i.e. Proc.new{}.arity returns zero. update test suites too.

    arityというのは「渡してもエラーにならない引数の数」のつもりだったのだが、 「無視されない(パラメータとして受けとった)引数の数」ということにした。 これにより Proc.new{}.arity は -1 でなく 0 になる。

これでRuby2に一歩(半歩)だけ近づいたな。

_ [Ruby]GC

以前考えていたGCアルゴリズムだが、 ブロックを生成するとローカル変数から参照されているオブジェクト全部に参照マークが付いて 効率が上がらないことが判明していた。 が、リターン時にlazyにマークをつければ効率はそんなに下がらない(はず)。 いかんせん思いついたのが遅すぎた。発表申し込みの〆切は明日だ。

今回はあきらめるしかないか。


«前の日記(2004年03月17日) 最新 次の日記(2004年03月19日)» 編集