[#21225] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2003/08/22
[#21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — nobu.nakada@... 2003/08/22

なかだです。

[#21228] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — matz@... (Yukihiro Matsumoto) 2003/08/22

まつもと ゆきひろです

[#21281] 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

16 messages 2003/08/29
[#21285] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/08/29

まつもと ゆきひろです

[#21288] Re: 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...> 2003/08/29

永井@知能.九工大です.

[#21306] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/09/03

まつもと ゆきひろです

[ruby-dev:21217] [PATCH] passing current block

From: nobu.nakada@...
Date: 2003-08-21 09:07:24 UTC
List: ruby-dev #21217
なかだです。

現在のブロックを他のメソッドに渡す場合を高速化してみました。

以下のコードで、nested(10)が三倍近く速くなるようです。

require 'benchmark'
def dummy
end
def nested(n, &b)
  if n > 0
    nested(n-1, &b)
  else
    dummy(&b)
  end
end
ITERATION = 100000
Benchmark.benchmark() do |b|
  b.report("nested(0)  ") {p = proc{}; ITERATION.times{nested(0, &p)}}
  b.report("nested(1)  ") {p = proc{}; ITERATION.times{nested(1, &p)}}
  b.report("nested(10) ") {p = proc{}; ITERATION.times{nested(10, &p)}}
end


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.515
diff -u -2 -p -r1.515 eval.c
--- eval.c	14 Aug 2003 17:19:23 -0000	1.515
+++ eval.c	21 Aug 2003 08:53:42 -0000
@@ -7230,4 +7230,11 @@ block_pass(self, node)
     }
 
+    if (ruby_block && ruby_block->block_obj == proc) {
+	PUSH_ITER(ITER_PRE);
+	result = rb_eval(self, node->nd_iter);
+	POP_ITER();
+	return result;
+    }
+
     Data_Get_Struct(proc, struct BLOCK, data);
     orphan = block_orphan(data);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next