Gaal Yahas writes:
> It looks like Duff's Device <http://www.lysator.liu.se/c/duffs-device.html>
> won't be possible in Perl6. This is a shame.
> 
>      sub duff ($from) {
>          # real life would use reference here, this is a demo
>          # dummy: simulate write to serial i/o port
>          my $to;
>          my $i = 0;
>      
>          my ($n, $count);
>          $count = $from.chars;
>      
>          $n = ($count + 7) / 8; # use integer in effect

* There's no such thing as `use integer`.  You just declare $n and
  $count to be ints.

           my int ($n, $count);

>      
>          %MY::Â{"l" ~ $count % 8}Â.goto();
>          l0: do {    $to ~= (substr $from, $i++, 1);
>          l7:         $to ~= (substr $from, $i++, 1);
>          l6:         $to ~= (substr $from, $i++, 1);
>          l5:         $to ~= (substr $from, $i++, 1);
>          l4:         $to ~= (substr $from, $i++, 1);
>          l3:         $to ~= (substr $from, $i++, 1);
>          l2:         $to ~= (substr $from, $i++, 1);
>          l1:         $to ~= (substr $from, $i++, 1);
>              } while (--$n>0);

* `do ... while` is now named `loop ... while`.
    
>          return $to;
>      }
> 
> In Pugs at least, labels may only only be assigned to blocks.

I believe Perl 6 hasn't changed its policy on labels, so you should be
able to write that in Perl 6.  But your behavior might be undefined.
It's weird to jump into the middle of a loop.  We may only allow you to
jump outwards from your dynamic scope.  

Don't cry though.  Duff's device is an optimization technique, which
would probably do nothing for a Perl 6 program.  You have to optimize
dynamic languages in very different ways from how you optimize hardware.

Luke

Reply via email to