# Wide Finder performance

**URL:** <https://www.ruby-forum.com/t/wide-finder-performance/140229>\
**Category:** Development\
**Created:** [June 12, 2008, 2:06am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229 "2008-06-12T02:06:52Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 2:06am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/1 "2008-06-12T02:06:52Z")

</div>

ã¾ã¤ã‚‚ã¨ ã‚†ãã²ã‚ã§ã™

Tim B.ã®Wide Finder Projectã§Rubyã®çµæžœãŒå¦™ã«ä½Žã„[1]ã®ã§è‡ª  
åˆ†ã§ã‚‚è©¦ã—ã¦ã¿ã¾ã—ãŸã€‚

[1] [ongoing by Tim Bray · WF XI: Results](http://www.tbray.org/ongoing/When/200x/2007/10/30/WF-Results)

ã§ã€ç§ãŒæ›¸ã„ãŸã®ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªãƒ—ãƒ­ã‚°ãƒ©ãƒ ã§ã™ã€‚

æ·»ä»˜ï¼‘ wf1.rb ã‚·ãƒ³ã‚°ãƒ«ãƒ—ãƒ­ã‚»ã‚¹ç‰ˆ  
æ·»ä»˜ï¼’ wf2.rb ãƒžãƒ«ãƒãƒ—ãƒ­ã‚»ã‚¹ç‰ˆ

é©å½“ã«ä¹±æ•°ã§ç”Ÿæˆã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å¯¾è±¡ã«å®Ÿè¡Œã—ã¦ã¿ã¾ã—ãŸãŒã€  
Pythonã‚ˆã‚Šé€Ÿã„ã€ã¨ã¯è¨€ã„ã¾ã›ã‚“ãŒã€å°‘ãªãã¨ã‚‚ä½•åå€ã‚‚é…ã„ã¨ã„  
ã†ã“ã¨ã¯ãªã•ãã†ã§ã™ã€‚ãƒžãƒ«ãƒãƒ—ãƒ­ã‚»ã‚¹ç‰ˆã¯CPUæ•°ã«åˆã‚ã›ã¦å¤‰æ•°j  
ã®å€¤ã‚’å¤‰æ›´ã—ã¦ãã ã•ã„ã€‚ç§ã®ãƒžã‚·ãƒ³ã¯ãƒ‡ãƒ¥ã‚¢ãƒ«ã‚³ã‚¢ã ã£ãŸã®ã§ã€  
ä¸€ç•ªæˆç¸¾ãŒè‰¯ã‹ã£ãŸã®ã¯j=2ã®æ™‚ã§ã—ãŸã€‚

ãƒ—ãƒ­ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å–ã£ãŸã‚‰ç„¡é§„ãŒè¦‹ã¤ã‹ã£ãŸã®ã§ã€ã•ãã»ã©trunkã«  
ãƒã‚§ãƒƒã‚¯ã‚¤ãƒ³ã—ã¦ãŠãã¾ã—ãŸã€‚

ã‚ã¨ã€æ°—ãŒã¤ã„ãŸã®ã¯vm\_yield\_setup\_argsã§æ¯Žå›žrb\_ary\_new4()ã§  
é…åˆ—ã‚’ä½œã£ã¦ã„ã‚‹ã“ã¨ã§ã™ã€‚yieldã®ãŸã³ã«ä½œã‚‹ã“ã®é…åˆ—ãŒã‘ã£ã“ã†  
GCã«è² æ‹…ã«ãªã£ã¦ã„ã‚‹ã‚ˆã†ã§ã™ã€‚ã“ã®è¾ºã®ä»•çµ„ã¿ã¯ã‚ˆãã‚ã‹ã‚‰ãªã„  
ã®ã§ã™ãŒã€ã“ã®é…åˆ—ã®å‰²ã‚Šå½“ã¦ã‚’æ¸›ã‚‰ã›ã‚‹ã¨ãƒ–ãƒ­ãƒƒã‚¯ã®å®Ÿè¡ŒåŠ¹çŽ‡ãŒ  
ã ã„ã¶æ”¹å–„ã§ããã†ã§ã™ã€‚

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 3:17am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/2 "2008-06-12T03:17:41Z")

</div>

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

> e$B$"$H!“5$$,$D$$$?$N$Oe(Bvm\_yield\_setup\_argse$B$GKh2se(Brb\_ary\_new4()e$B$Ge(B  
> e$BG[Ns$r:n$C$F$$$k$3$H$G$9!#e(Byielde$B$N$?$S$K:n$k$3$NG[Ns$,$1$C$3$&e(B  
> GCe$B$KIiC4$K$J$C$F$$$k$h$&$G$9!#$3$NJU$N;EAH$\_$O$h$/$o$+$i$J$$e(B  
> e$B$N$G$9$,!”$3$NG[Ns$N3d$jEv$F$r8:$i$;$k$H%V%m%C%/$N\<B9T8zN($,e(B  
> e$B$@$$$V2~A1$G$-$=$&$G$9!#e(B

e$B!!$9$\_$^$;$s!$8=\>]$r$3$A$i$G$b3NG’$7$?$$$N$G$9$,!$$I$&;n$9$N$+$o$+$je(B  
e$B$^$;$s$G$7$?!%65$($FLc$($J$$$G$7$g$&$+!%e(B

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 3:41am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/3 "2008-06-12T03:41:44Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35059] Re: Wide Finder performance”  
on Thu, 12 Jun 2008 10:16:44 +0900, SASADA Koichi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|Yukihiro M. wrote:  
|\> e$B$"$H!"5$$,$D$$$?$N$Oe(Bvm\_yield\_setup\_argse$B$GKh2se(Brb\_ary\_new4()e$B$Ge(B  
|\> e$BG[Ns$r:n$C$F$$$k$3$H$G$9!#e(Byielde$B$N$?$S$K:n$k$3$NG[Ns$,$1$C$3$&e(B  
|\> GCe$B$KIiC4$K$J$C$F$$$k$h$&$G$9!#$3$NJU$N;EAH$_$O$h$/$o$+$i$J$$e(B  
|\> e$B$N$G$9$,!"$3$NG[Ns$N3d$jEv$F$r8:$i$;$k$H%V%m%C%/$N\<B9T8zN($,e(B  
|\> e$B$@$$$V2~A1$G$-$=$&$G$9!#e(B  
|  
|e$B!!$9$_$^$;$s!$8=\>]$r$3$A$i$G$b3NG’$7$?$$$N$G$9$,!$$I$&;n$9$N$+$o$+$je(B  
|e$B$^$;$s$G$7$?!%65$($FLc$($J$$$G$7$g$&$+!%e(B

e$B$I$s$J%W%m%0%i%`$G$b$h$$$N$G$9$,!"%V%m%C%/$r;H$&$b$N$r\<B9T$9e(B  
e$B$k$He(B vm\_yield\_setup\_args() e$B$NCf$Ge(B rb\_ary\_new4()  
e$B$r8F$S$^$9!#e(B

e$B\>r7o$H$7$F$O!"e(Blambda e$B$G$J$/e(B iseq-\>arg\_rest e$B$,e(B -1  
e$B$G$J$/!"e(B  
iseq-\>arg\_post\_lene$B$,%;%C%H$5$l$F$$$J$$;~$K$O$+$J$i$:e(B  
rb\_ary\_new4()e$B$^$?$Oe(Brb\_ary\_new()e$B$,8F$P$l$^$9!#e(B

e$B@hDx$Ne(Bwfe$B$N%W%m%0%i%`$@$He(B

data.scan(RE) { |ongoing| counts[ongoing[0]] += 1 }

e$B$NItJ,$+$ie(B

rb\_yield(result) →   
rb\_yield\_0(1, &val) →   
vm\_yield(GET\_THREAD, argc, argv) →   
invoke\_block\_from\_c(th, blockptr, blockptr-\>self, argc, argv, 0, 0) →   
vm\_yield\_setup\_args(th, iseq, argc, cfp-\>sp, blockptr, type ==  
VM\_FRAME\_MAGIC\_LAMBDA)

e$B$H8F$P$l$F$$$^$9!#e(Brb\_yield()e$B$+$i$R$H$D$@$1$NCM$,8F$P$l!"\<u\<he(B  
e$BB&$,0l$D$@$1$7$+%Q%i%a!\<%?$r\<u$1$D$1$J$$;~$K$OG[Ns$r:n$k$N$Oe(B  
e$BL5BL$J5$$,$9$k$N$G$9$,!#e(B

e$B$J$s$+4\*0c$$$7$F$=$&$J5$$,$9$ke(B…e$B!#e(B

```
                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

```

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 5:28am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/4 "2008-06-12T05:28:18Z")

</div>

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

> e$B\>r7o$H$7$F$O!"e(Blambda e$B$G$J$/e(B iseq-\>arg\_rest e$B$,e(B -1 e$B$G$J$/!"e(B  
> iseq-\>arg\_post\_lene$B$,%;%C%H$5$l$F$$$J$$;~$K$O$+$J$i$:e(B  
> rb\_ary\_new4()e$B$^$?$Oe(Brb\_ary\_new()e$B$,8F$P$l$^$9!#e(B

e$B!!e(Biseq-\>arg\_rest e$B$,e(B -1 e$B$G$J$$!$$H$O!$e(Brest  
e$B0z?t$,$"$k!$$H$$$&OC$G$9!%e(B  
|a, \*b| e$B$Ne(B b e$B$NItJ,$@$+$i!$G[Ns$r:n$C$F$$$^$9!%e(B

> e$B@hDx$Ne(Bwfe$B$N%W%m%0%i%`$@$He(B
> 
> data.scan(RE) { |ongoing| counts[ongoing[0]] += 1 }

== disasm: \<ISeq:block in @…/trunk/test.rb\>======================  
== catch table  
| catch type: redo st: 0000 ed: 0025 sp: 0000 cont: 0000

| catch type: next st: 0000 ed: 0025 sp: 0000 cont: 0025 |
| --- |

local table (size: 2, argc: 1 [opts: 0, rest: -1, post: 0, block:  
-1] s3)  
[2] ongoing

e$B!!$3$l$r8+$k$H!$e(Barg\_rest e$B$Oe(B -1 e$B$N$h$&$G$9!%e(B

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 5:49am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/5 "2008-06-12T05:49:58Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35064] Re: Wide Finder performance”  
on Thu, 12 Jun 2008 11:00:10 +0900, SASADA Koichi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|Yukihiro M. wrote:  
|\> e$B\>r7o$H$7$F$O!"e(Blambda e$B$G$J$/e(B iseq-\>arg\_rest e$B$,e(B -1 e$B$G$J$/!“e(B  
|\> iseq-\>arg\_post\_lene$B$,%;%C%H$5$l$F$$$J$$;~$K$O$+$J$i$:e(B  
|\> rb\_ary\_new4()e$B$^$?$Oe(Brb\_ary\_new()e$B$,8F$P$l$^$9!#e(B  
|  
|e$B!!e(Biseq-\>arg\_rest e$B$,e(B -1 e$B$G$J$$!$$H$O!$e(Brest e$B0z?t$,$”$k!$$H$$$&OC$G$9!%e(B  
||a, \*b| e$B$Ne(B b e$B$NItJ,$@$+$i!$G[Ns$r:n$C$F$$$^$9!%e(B

e$B$“$l!”$J$K$+$\*$+$7$$$G$9$M!#$b$&\>/$73N$+$a$F$\_$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 8:48am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/6 "2008-06-12T08:48:46Z")

</div>

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

> e$B$G!"$=$3$G;H$o$l$F$$$?$N$Oe(Bscane$B$G$O$J$/e(Bfore$BJ8$G$7$?!#e(B
> 
> e$B$D$^$je(B
> 
> for line in ARGF  
> …  
> end
> 
> e$B$G$O%Q%i%a!\<%?$,$R$H$D$7$+$J$/!“e(Byielde$B$K$b$R$H$D$7$+CM$,EO$5e(B  
> e$B$l$J$$$N$Ke(Biseq-\>arg\_reste$B$,e(B0e$B$K$J$jG[Ns$H$7$FEO$5$l$^$9!#$^$”!"e(B

e$B!!$J$k$[$I!%e(B

e$B!!6D$k$H$\*$j!$$3$NM}M3$Oe(B for  
e$B$N0UL#$r=\>MhDL$j87L)$KE,MQ$9$k$?$a$K!$e(B

for [vars] in [expr]; …  
e$B$r!$e(B  
[expr].each{|\*tmp| vars = \*tmp …}  
e$B$HE83+$9$k$+$i$G$9!%e(B

e$B!!$A$g$C$H!$$3$l$r$J$s$H$+$9$kJ}K!$r;W$$$D$+$J$$$s$G$9$,!$$J$s$H$+$7e(B  
e$B$?$[$&$,$$$$$G$7$g$&$+!%e(B

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 7:07am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/7 "2008-06-12T07:07:48Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35070] Re: Wide Finder performance”  
on Thu, 12 Jun 2008 12:45:28 +0900, Yukihiro M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

||Yukihiro M. wrote:  
||\> e$B\>r7o$H$7$F$O!"e(Blambda e$B$G$J$/e(B iseq-\>arg\_rest e$B$,e(B -1 e$B$G$J$/!“e(B  
||\> iseq-\>arg\_post\_lene$B$,%;%C%H$5$l$F$$$J$$;~$K$O$+$J$i$:e(B  
||\> rb\_ary\_new4()e$B$^$?$Oe(Brb\_ary\_new()e$B$,8F$P$l$^$9!#e(B  
||  
||e$B!!e(Biseq-\>arg\_rest e$B$,e(B -1 e$B$G$J$$!$$H$O!$e(Brest e$B0z?t$,$”$k!$$H$$$&OC$G$9!%e(B  
|||a, _b| e$B$Ne(B b e$B$NItJ,$@$+$i!$G[Ns$r:n$C$F$$$^$9!%e(B  
|  
|e$B$“$l!”$J$K$+$_$+$7$$$G$9$M!#$b$&\>/$73N$+$a$F$\_$^$9!#e(B

iseq-\>arg\_reste$B$,e(B0(!= -1)e$B$@$C$?$N$O!"@h$N%a!\<%k$KE:IU$7$?e(B  
wf1.rbe$B$G$O$J$/!“JL$N%W%m%0%i%`$G$7$?!#$4$a$s$J$5$$!#e(B  
e$B$G!”$=$3$G;H$o$l$F$$$?$N$Oe(Bscane$B$G$O$J$/e(Bfore$BJ8$G$7$?!#e(B

e$B$D$^$je(B

for line in ARGF  
…  
end

e$B$G$O%Q%i%a!\<%?$,$R$H$D$7$+$J$/!“e(Byielde$B$K$b$R$H$D$7$+CM$,EO$5e(B  
e$B$l$J$$$N$Ke(Biseq-\>arg\_reste$B$,e(B0e$B$K$J$jG[Ns$H$7$FEO$5$l$^$9!#$^$”!"e(B  
e$B$3$l$re(B

ARGF.each do |line|  
…  
end

e$B$K$9$k$@$1$G$=$l$J$j$KB.$/$J$k$N$G5$$K$9$k$3$H$O$J$$$N$+$b$7e(B  
e$B$l$^$;$s$,!#e(Bfore$BJ8$OB?=EBeF~$K$J$k$+$i$+$J$"!#e(B

```
                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

```

---

<div class="post-metadata">

**Author:** ![Yukihiro\_M](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c57346/32.png) [@Yukihiro\_M](https://www.ruby-forum.com/u/Yukihiro_M)\
**Post date:** [June 12, 2008, 8:49am UTC](https://www.ruby-forum.com/t/wide-finder-performance/140229/8 "2008-06-12T08:49:22Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35072] Re: Wide Finder performance”  
on Thu, 12 Jun 2008 14:19:12 +0900, SASADA Koichi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:  
|\>  
|\> for line in ARGF  
|\> …  
|\> end  
|\>  
|\> e$B$G$O%Q%i%a!\<%?$,$R$H$D$7$+$J$/!“e(Byielde$B$K$b$R$H$D$7$+CM$,EO$5e(B  
|\> e$B$l$J$$$N$Ke(Biseq-\>arg\_reste$B$,e(B0e$B$K$J$jG[Ns$H$7$FEO$5$l$^$9!#$^$”!"e(B

|e$B!!6D$k$H$\*$j!$$3$NM}M3$Oe(B for e$B$N0UL#$r=\>MhDL$j87L)$KE,MQ$9$k$?$a$K!$e(B  
|  
| for [vars] in [expr]; …  
|e$B$r!$e(B  
| [expr].each{|\*tmp| vars = \*tmp …}  
|e$B$HE83+$9$k$+$i$G$9!%e(B  
|  
|e$B!!$A$g$C$H!$$3$l$r$J$s$H$+$9$kJ}K!$r;W$$$D$+$J$$$s$G$9$,!$$J$s$H$+$7e(B  
|e$B$?$[$&$,$$$$$G$7$g$&$+!%e(B

e$BM%@h=g0L$ODc$$$N$G$J$s$H$+$9$kJ}K!$r;W$$$D$$$F!“;~4V$,\<h$l$?e(B  
e$B$i!”$G9=$$$^$;$s!#e(B
