[#15040] WeakRef and load(file, true) — Shugo Maeda <shugo@...>
前田です。
[#15043] puts array — "Akinori MUSHA" <knu@...>
puts に配列を与えたときの挙動が最新の 1.7 では変わっていて
こんにちは、なかむら(う)です。
At Wed, 7 Nov 2001 09:54:03 +0900,
[#15044] resolv.rb — Kazuhiro NISHIYAMA <zn@...>
Resolv::Hostsのデフォルトのファイル名ってWindows 9x環境だと
[#15047] can't set chomped String to environment — nobu.nakada@...
なかだです。
まつもと ゆきひろです
[#15067] rb_eval_string — OJ <oj@...7.com>
OJです。
なかだです。
OJです。
なかだです。
OJです。
わたなべです。
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
[#15100] Using static mark stack, GC is slow. — sheepman <sheepman@...>
こんばんは
[#15101] [bug?] pty causes segv by getting SIGINT — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
[#15102] Gtk::Object#flags!= — akira yamada / やまだあきら <akira@...>
[#15116] rubylib_mangle whitespace — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
まつもと ゆきひろです
わたなべです。
[#15132] uri.rb — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#15174] strange behavior about PTY.spawn — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
[#15175] ruby-mingw32 configuration — HIDAKA Takahiro <cv8t-hdk@...>
ひだかです。
わたなべです。
[#15239] gc.c (gc_mark_rest): declare work area as static — "K.Kosako" <kosako@...>
現在のGCのアルゴリズム(matz-sheepman)を少し変更しようと思って、
On Thu, 22 Nov 2001 16:21:17 +0900
sheepmanさんの<20011122202749.56b8eb49.sheepman@tcn.zaq.ne.jp>から
[#15251] Re: [ruby-ext:01999] Re: syslog module is becoming ready — "Akinori MUSHA" <knu@...>
というわけで 1.7 に syslog モジュールを入れました。
なかだです。
ただただしです。
At Mon, 26 Nov 2001 22:30:03 +0900,
In article <86r8ql90zt.wl@archon.local.idaemons.org>,
At Mon, 26 Nov 2001 23:07:30 +0900,
あおきです。
At Wed, 28 Nov 2001 07:58:55 +0900,
あおきです。
そうそう、 optparse も標準に入っていると便利だと思うのですが
まつもと ゆきひろです
In message <1007018271.960435.20342.nullmailer@ev.netlab.jp>
まつもと ゆきひろです
[#15270] ruby on NetBSD — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
In message <20011128181510.3D11.USA@osb.att.ne.jp>
こんにちは、なかむら(う)です。
In message <20011128182726.3D14.USA@osb.att.ne.jp>
なかだです。
こんにちは、なかむら(う)です。
In message <20011129183834.3790.USA@osb.att.ne.jp>
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
取り込み、ありがとうございます。
こんにちは、なかむら(う)です。
[#15292] Re: m17n ruby 特に TRON 文字コード — TOYOFUKU Chikanobu <toyofuku@...>
豊福です。
[#15298] time.rb — Tanaka Akira <akr@...17n.org>
というわけで、timex.rb 改め time.rb が rough に入ったのでご意見募集です。
In article <hvovgftkgy7.fsf@coulee.a02.aist.go.jp>,
まつもと ゆきひろです
まつもと ゆきひろです
In article <1009298477.998171.30253.nullmailer@ev.netlab.jp>,
[ruby-dev:15249] Re: gc.c (gc_mark_rest): declare work area as static
Yukihiro Matsumotoさんの<1006756628.559001.23763.nullmailer@ev.netlab.jp>から
> |スタックが許す限りrb_gc_mark()を再帰呼び出しするように、少しだけ変更してみました。
> |この変更が意味をもつように恣意的に書いたスクリプトでだけ、かなりGCの速度が
> |向上するのですが、ボツになると思われるのでパッチは出さないでおきます。
> |(どうして最初からそうなっていないのかが、判らないのですが。)
>
> もったいない。なぜボツになると思われたのですか?
以下のスクリプトなんですが、
ネストの深さとデータの参照の深さの調整に苦労したので、
普通のスクリプトを書いている人には全く関係のない"改良"としか
思えなかったので。
(ただ、私のようなプログラム鑑賞派にとっては、
gc_mark_all()とgc_mark_rest()の処理の対称性が向上するので嬉しい。)
パッチのほうは、sheepmanさんの修正[ruby-dev:15242]を行ったものに対する
パッチです。
GC::disable
gc = lambda {
puts "GC start..."
GC::enable
tstart = Time::now
GC::start
tend = Time::now
GC::disable
puts "GC end"
[tstart, tend]
}
def nest(level, what, *args)
if level == 0
return what.call(*args)
else
return nest(level - 1, what)
end
end
def make(level)
if level == 0
return nil
else
level -= 1
if level < 11
return [make(level)]
else
return [make(level), make(level)]
end
end
end
def interval(ts, te)
return (te.tv_sec - ts.tv_sec) * 1000000 + (te.usec - ts.usec)
end
x = make(25)
LEVEL = 1780
t = 0
ts, te = nest(LEVEL, gc)
t += interval(ts, te)
ts, te = nest(LEVEL, gc)
t += interval(ts, te)
ts, te = nest(LEVEL, gc)
t += interval(ts, te)
ts, te = nest(LEVEL, gc)
t += interval(ts, te)
ts, te = nest(LEVEL, gc)
t += interval(ts, te)
printf("average time: %d usec.\n", t.to_f / 5.0)
# => 2739469 (original)
# => 581386 (modify)
--- gc.c.orig Mon Nov 26 16:10:15 2001
+++ gc.c Mon Nov 26 16:14:42 2001
@@ -427,26 +427,23 @@
#define MARK_STACK_EMPTY (mark_stack_ptr == mark_stack)
-static int mark_all;
-
static void rb_gc_mark_children(VALUE ptr);
+
static void
gc_mark_all()
{
RVALUE *p, *pend;
int i;
- mark_all = 0;
- while(!mark_all){
- mark_all = 1;
- for (i = 0; i < heaps_used; i++) {
- p = heaps[i]; pend = p + heaps_limits[i];
- while (p < pend) {
- if ((p->as.basic.flags & FL_MARK) &&
- (p->as.basic.flags != FL_MARK)) {
- rb_gc_mark_children((VALUE)p);
- }
- p++;
+
+ init_mark_stack();
+ for (i = 0; i < heaps_used; i++) {
+ p = heaps[i]; pend = p + heaps_limits[i];
+ while (p < pend) {
+ if ((p->as.basic.flags & FL_MARK) &&
+ (p->as.basic.flags != FL_MARK)) {
+ rb_gc_mark_children((VALUE)p);
}
+ p++;
}
}
}
@@ -565,6 +562,7 @@
rb_gc_mark(ptr)
VALUE ptr;
{
+ int ret;
register RVALUE *obj = RANY(ptr);
if (rb_special_const_p(ptr)) return; /* special const not marked */
@@ -573,23 +571,21 @@
obj->as.basic.flags |= FL_MARK;
- if (mark_stack_overflow){
- mark_all &= 0;
- }else{
- int ret;
- CHECK_STACK(ret);
- if (ret) {
+ CHECK_STACK(ret);
+ if (ret) {
+ if (!mark_stack_overflow) {
if (mark_stack_ptr - mark_stack < MARK_STACK_MAX) {
*mark_stack_ptr = ptr;
mark_stack_ptr++;
- }else{
+ }
+ else {
mark_stack_overflow = 1;
}
- }else{
- rb_gc_mark_children(ptr);
}
}
-
+ else {
+ rb_gc_mark_children(ptr);
+ }
}
void
@@ -1172,7 +1168,6 @@
while (!MARK_STACK_EMPTY){
if (mark_stack_overflow){
gc_mark_all();
- break;
}else{
gc_mark_rest();
}
--
小迫@ソフネック 渋谷区恵比寿1-15-1