Preparing for 1.8.7-preview1

 延び延びになってしまいましたが、ようやく enumerator 関連、
Enumerable, Array のバックポートが終わりました。

 明日の夕方に preview1 を出します。

At Fri, 11 Apr 2008 15:45:11 +0900,
I wrote:

 Object#tap と Symbol#to_proc は入れます。

 この二つは西山さんに入れてもらいました。ありがとうございます。

 今のところ、新機能として入れるのが確定している(実際に作業中)
なのは Enumerable, Array, Hash の各メソッドです。

 Hash は手が滑りました。今回は見送ります。

 以下にまだ西山さんからの提案が残っていますが、私はもうこの中の
ものをやる余裕はないです。西山さんでも他の方でも、興味と時間が
あればお願いします。

http://rubyforge.org/tracker/?atid=22040&group_id=426&func=browse

 私が明日(まで)にやるのは syck 等のバグ修正のマージ、テストの追åŠ
および各プラットフォームでのテスト(ä¾é ¼)、そしてパッケージングです。

 もし余裕があれば、 *dbm, etc, stringio 等にも enumerator 対応を
入れます。(まだtrunk にもないですが)

 trunk の NEWS に書かれていないものもいっぱいあってしびれました。
自分が割ける時間も想定外に少なく、ダブルで見積を誤りました。今度
からはこまめに backport します。

e$B@>;3OB9-$G$9!#e(B

At Mon, 14 Apr 2008 20:45:26 +0900,
Akinori MUSHA wrote:

e$B!!e(BObject#tap e$B$He(B Symbol#to_proc e$B$OF~$l$^$9!#e(B

e$B!!$3$NFs$D$O@>;3$5$s$KF~$l$F$b$i$$$^$7$?!#$"$j$,$H$&$4$6$$$^$9!#e(B

railse$B%3%^%s%I$G$3$1$?$N$G$J$<$+$H;W$C$?$i!"e(Bbackporte$B$7$F$_$?e(B
Symbol#to_proce$B$Oe(Bcalle$B$N0z?t$,G[Ns$N;~$K$@$a$G$7$?!#e(B

e$B$I$&$9$l$P$$$$$N$+$o$+$i$J$+$C$?$N$G!"$I$J$?$+=$@5$r$*4j$$$7$^$9!#e(B

% ruby18 -e ‘:object_id.to_proc.call([1,2])’
-e:1:in object_id': wrong number of arguments (1 for 0) (ArgumentError) from -e:1:into_proc’
from -e:1:in `call’
from -e:1
%

Akinori MUSHA e$B$5$s$O=q$-$^$7$?e(B:

e$B!!L@F|$NM<J}$Ke(B preview1 e$B$r=P$7$^$9!#e(B

e$B!!0J2<$K$^$@@>;3$5$s$+$i$NDs0F$,;D$C$F$$$^$9$,!";d$O$b$&$3$NCf$Ne(B
e$B$b$N$r$d$kM>M5$O$J$$$G$9!#@>;3$5$s$G$bB>$NJ}$G$b!“6=L#$H;~4V$,e(B
e$B$”$l$P$*4j$$$7$^$9!#e(B

http://rubyforge.org/tracker/?atid=22040&group_id=426&func=browse

e$B$b$7$d$k$H$7$F!"e(B
e$B%?%$%%j%%C%H$OK\F|e(B(4/15)e$B$NM<J}$G$7$g$&$+e(B?

At Tue, 15 Apr 2008 13:32:30 +0900,
akira yamada / やまだあきら wrote:

もしやるとして、
タイミリミットは本日(4/15)の夕方でしょうか?

 すみません、個人的な用事で電話・インターネット圏外にいて返答
できませんでした。今し方ruby_1_8_7ブランチを切り、これから
preview1を出しますが、完全な機能フリーズは今週末とします。

 それまではパッチをMLに投げてもらい、念のためみなさんで目を
通し、私がOKを出す形にします。

 たびたび遅れて申し訳ないです。

e$B:XF#$H?=$7$^$9!#e(B

On Mon, 14 Apr 2008 20:45:26 +0900
“Akinori MUSHA” [email protected] wrote:

e$B!!1d$S1d$S$K$J$C$F$7$^$$$^$7$?$,!“$h$&$d$/e(B enumerator e$B4XO”!"e(B
Enumerable, Array e$B$N%P%C%/%]!<%H$,=*$o$j$^$7$?!#e(B

e$B!!L@F|$NM<J}$Ke(B preview1 e$B$r=P$7$^$9!#e(B

knue$B$5$s!"$*Hh$l$5$^$G$9!#e(B

e$B%H%i%C%+!<$N7+$jJV$7$K$J$C$F$7$^$$62=L$G$9$,!"$I$J$?$+e(B GC.stress
e$B$r%3%_%C%H$7$FD:$1e(B
e$B$^$;$s$G$7$g$&$+!#e(B

http://rubyforge.org/tracker/index.php?func=detail&aid=19000&group_id=426&atid=22040

e$B%9%/%j%W%H$r=q$$$F$$$k?M8~$1$H$$$&$h$j$b!"e(BCe$B$r=q$$$F$$$k?M8~$1$N5!G=$J$N$GM%@hEY$,e(B
e$B0lCJ2<$,$k$N$OG<F@$J$N$G$9$,!“Hs>o$K8D?ME*$JM}M3e(B(e$B3HD%%i%$%V%i%j$r=q$$$F$ke(B)e$B$+$ie(B
1.8e$B$K$bF~$C$F$$$k$H!”$H$F$b$&$l$7$$$G$9!#e(B

e$BFbMF$H$7$F$b!"e(Btrunke$B$+$i$[$\4]<L$7$G:Q$s$Ge(Bporte$B$i$7$$=$@5$b$J$/!"5;=QE*$J%j%9%/$bHf3SE*e(B
e$BDc$$$H9M$($^$9!#e(B

e$B%H%i%C%+!<$Ne(BWebe$B%Z!<%8$G$O!“$J$<$+9TKv$,@^$jJV$5$l$F$7$^$C$F%Q%C%A$,2u$l$F$$$ke(B
(e$B%a!<%k$Ne(B
notifier e$B$@$HBg>fIW$J$N$K!De(B)
e$B$N$G!”%a!<%kKvHx$K!"$=$l$rD{@5$7$F$+$D99?7$7$?%Q%C%A$re(B
e$B:F7G$7$^$9!#e(B

(…) e$B6=L#$H;~4V$,e(B
e$B$"$l$P$*4j$$$7$^$9!#e(B

e$B$H$$$&$3$H$G!“5$$,8~$$$?J}$,$b$7$$$i$C$7$c$C$?$i!”$h$m$7$/$*4j$$$7$^$9!#e(B

Index: signal.c

— signal.c (revision 16024)
+++ signal.c (working copy)
@@ -628,6 +628,8 @@
}
#endif

  • extern int ruby_gc_stress;
  • ruby_gc_stress = 0;
    rb_bug(“Segmentation fault”);
    }
    #endif
    Index: gc.c
    ===================================================================
    — gc.c (revision 16024)
    +++ gc.c (working copy)
    @@ -76,6 +76,8 @@
    static VALUE nomem_error;
    static void garbage_collect();

+int ruby_gc_stress = 0;
+
void
rb_memerror()
{
@@ -89,6 +91,41 @@
rb_exc_raise(nomem_error);
}

+/*

    • call-seq:
    • GC.stress => true or false
    • returns current status of GC stress mode.
  • */

+static VALUE
+gc_stress_get(self)

  • VALUE self;
    +{
  • return ruby_gc_stress ? Qtrue : Qfalse;
    +}

+/*

    • call-seq:
    • GC.stress = bool => bool
    • updates GC stress mode.
    • When GC.stress = true, GC is invoked for all GC opportunity:
    • all memory and object allocation.
    • Since it makes Ruby very slow, it is only for debugging.
  • */

+static VALUE
+gc_stress_set(self, bool)

  • VALUE self, bool;
    +{
  • rb_secure(2);
  • ruby_gc_stress = RTEST(bool);
  • return bool;
    +}

void *
ruby_xmalloc(size)
long size;
@@ -101,7 +138,7 @@
if (size == 0) size = 1;
malloc_increase += size;

  • if (malloc_increase > malloc_limit) {
  • if (ruby_gc_stress || malloc_increase > malloc_limit) {
    garbage_collect();
    }
    RUBY_CRITICAL(mem = malloc(size));
    @@ -141,6 +178,7 @@
    if (!ptr) return xmalloc(size);
    if (size == 0) size = 1;
    malloc_increase += size;
  • if (ruby_gc_stress) garbage_collect();
    RUBY_CRITICAL(mem = realloc(ptr, size));
    if (!mem) {
    garbage_collect();
    @@ -383,7 +421,7 @@
    if (during_gc)
    rb_bug(“object allocation during garbage collection phase”);
  • if (!freelist) garbage_collect();
  • if (ruby_gc_stress || !freelist) garbage_collect();

    obj = (VALUE)freelist;
    freelist = freelist->as.free.next;
    @@ -2037,6 +2075,8 @@
    rb_define_singleton_method(rb_mGC, “start”, rb_gc_start, 0);
    rb_define_singleton_method(rb_mGC, “enable”, rb_gc_enable, 0);
    rb_define_singleton_method(rb_mGC, “disable”, rb_gc_disable, 0);

  • rb_define_singleton_method(rb_mGC, “stress”, gc_stress_get, 0);

  • rb_define_singleton_method(rb_mGC, “stress=”, gc_stress_set, 1);
    rb_define_method(rb_mGC, “garbage_collect”, rb_gc_start, 0);

    rb_mObSpace = rb_define_module(“ObjectSpace”);

At Mon, 14 Apr 2008 22:13:21 +0900,
Kazuhiro NISHIYAMA wrote:

%
 tracker にファイルしました。

http://rubyforge.org/tracker/index.php?func=detail&aid=19551&group_id=426&atid=22040

e$B:XF#$H?=$7$^$9!#e(B

On Wed, 16 Apr 2008 04:57:10 +0900
“Akinori MUSHA” [email protected] wrote:

e$B!!M<J}$K4V$K9g$$$^$;$s$G$7$?!D!#<+J,$G$b$“$-$l$k$/$i$$$O$^$C$Fe(B
e$B$7$^$C$F$$$^$9$,!”$a$2$:$K$d$j$^$9!#e(B

e$B$$$($$$(!“4|BT$KH?$7$FBgI}$KCY$l$?!”$H$+$G$O$“$j$^$;$s$7!#e(B
e$BL@NF$J%”%J%&%s%9!&%l%9%]%s%9$OAG@2$i$7$$$H;W$$$^$9!#e(B

e$B!!$"$j$,$H$&$4$6$$$^$9!#@>;3$5$s$,F~$l$F$/$l$^$7$?!#e(B

e$B3NG’$7$^$7$?!#@>;3$5$s!“Ip<T$5$s!”$"$j$,$H$&$4$6$$$^$7$?!#e(B

At Tue, 15 Apr 2008 12:01:42 +0900,
Tadashi S. wrote:

 明日の夕方に preview1 を出します。

knuさん、お疲れさまです。

 夕方に間に合いませんでした…。自分でもあきれるくらいはまって
しまっていますが、めげずにやります。

トラッカーの繰り返しになってしまい恐縮ですが、どなたか GC.stress ã‚’ã‚³ãƒŸãƒƒãƒˆã—ã¦é ‚ã‘
ませんでしょうか。

http://rubyforge.org/tracker/index.php?func=detail&aid=19000&group_id=426&atid=22040
(snip)
トラッカーのWebページでは、なぜか行末が折り返されてしまってパッチが壊れている (メールの
notifier だと大丈夫なのに…) ので、メール末尾に、それを訂正してかつ更新したパッチを
再掲します。

 ありがとうございます。西山さんが入れてくれました。

e$B@>;3OB9-$G$9!#e(B

At Wed, 16 Apr 2008 12:52:22 +0900,
Tanaka A. wrote:

% ruby18 -e ‘:object_id.to_proc.call([1,2])’
-e:1:in object_id': wrong number of arguments (1 for 0) (ArgumentError) from -e:1:into_proc’
from -e:1:in `call’
from -e:1

1.8 e$B$^$G$K$*$1$k%V%m%C%/8F$S=P$7$N%;%^%s%F%#%/%9$O:.Mp$7$F$$e(B
e$B$k$?$a!"$A$c$s$H=$@5$9$k$N$O$J$+$J$+Fq$7$$$s$8$c$J$$$+$H;W$$e(B
e$B$^$9!#e(B

ActiveSupport
2.0.2e$B$G$O0J2<$N<BAu$K$J$C$F$$$F!"e(BRubye$B%l%Y%k$G$Oe(B
e$B2DG=$N$h$&$J$N$G!"B>$NJ}K!$,$J$1$l$Pe(Brb_eval_stringe$B$r;H$&$3$H$Ke(B
e$B$J$k$h$&$J5$$,$7$^$9!#e(B

class Symbol
def to_proc
Proc.new { |*args| args.shift.send(self, *args) }
end
end

In article [email protected],
Kazuhiro NISHIYAMA [email protected] writes:

e$B$I$&$9$l$P$$$$$N$+$o$+$i$J$+$C$?$N$G!"$I$J$?$+=$@5$r$*4j$$$7$^$9!#e(B

% ruby18 -e ‘:object_id.to_proc.call([1,2])’
-e:1:in object_id': wrong number of arguments (1 for 0) (ArgumentError) from -e:1:in to_proc’
from -e:1:in `call’
from -e:1

1.8 e$B$^$G$K$*$1$k%V%m%C%/8F$S=P$7$N%;%^%s%F%#%/%9$O:.Mp$7$F$$e(B
e$B$k$?$a!"$A$c$s$H=$@5$9$k$N$O$J$+$J$+Fq$7$$$s$8$c$J$$$+$H;W$$e(B
e$B$^$9!#e(B