On Mon, 5 Nov 2001, Brent Dax wrote:
> Michael Fischer:
> # On Nov 04, Brent Dax <[EMAIL PROTECTED]> took up a keyboard
> # and banged out
> # > Michael Fischer:
> # > # In the goto case, we spin. And perhaps I am broken there. End
> # > # really wants to return, not just set the pc, but I hadn't thought
> # > # of a clever way to do that corner case, and wanted to see what
> # > # the behavior would be without it. I suspect I need it.
> # >
> # > Can't you just break()?
> #
> # Out of a function?
>
> Isn't the win in computed goto that you inline the sub bodies and can
> loop implicitly instead of explicitly, thus saving a jump or two?
Exactly, that's why I suggested not to use computed goto when tracing,
checking bounds or profiling, there is no way , I think, to use it without
loosing speed.
Daniel Grunblatt.
>
> goto *lookup[*pc];
>
> op0:
> return;
> op1:
> pc += 1;
> goto *lookup[*pc];
> op2:
> /* whatever */
> pc += size_of_op_2;
> goto lookup[*pc];
> op3:
> /* this one may halt */
> if(whatever) {
> pc += size_of_op_3;
> goto lookup[*pc];
> }
> else {
> return;
> }
>
> vs.
>
>
> while(pc) {
> goto *lookup[*pc];
>
> op0:
> pc=Parrot_op_end(pc, interp);
> continue;
> op1:
> pc=Parrot_op_noop(pc, interp);
> continue;
> op2:
> pc=Parrot_op_whatever(pc, interp);
> continue;
> op3:
> pc=Parrot_op_whatever_else(pc, interp);
> continue;
> ...
> }
>
> The second example really is no better than a switch (and perhaps worse,
> since the compiler can't get a high-level view of things and maybe come
> up with a better way to do it).
>
> --Brent Dax
> [EMAIL PROTECTED]
> Configure pumpking for Perl 6
>
> When I take action, I'm not going to fire a $2 million missile at a $10
> empty tent and hit a camel in the butt.
> --Dubya
>
>