> >> : Piers Cawley writes:
> >> : ...
> >> : The trouble is, unless Perl6 is going to be guaranteed to do
> >> : optimization of tail calls, this is going to lead to horribly slow
> >> : code. So, do I bite the bullet and recast some of the functions in an
> >> : iterative vein, or do I trust that Perl6 will do tail call optimization?
> >> : 
> >> : Larry?
> >>
> >> Larry Wall responds: 
> >>
> >> Why not?  The only casualty is caller()'s semantics, and I think we
> >> can live with that, or disable the optimization on routines that use
> >> caller().

Anything that touches string evaluation (Perl5's eval"") could harbour
caller(), this wouldn't matter unless there was a way to proprogate
exceptions out of an eval"" - and I bet someone already has the
appropriate RPC written.

=head Taking of pragmas...

I spotted another ape returning values from functions using package
globals.  Can we have another strict type:

    use strict 'asylum';

should stop programmers trying that one ;-)

=cut

> > Carp.pm is implemented with caller(), does that mean:
> >
> > sub forever {
> >     my $depth = shift;
> >
> >     croak "I got bored"
> >         if $depth == 1000;
> >
> >     forever($depth + 1);
> > }
> >
> > will have its optimizations disabled?  Or is that fair game;
> > considering you have to play a little more intimately with Carp to
> > croak from the right place?
> 
> Hmm... I'd hope croak would do the right thing without having to break
> the tail call optimization. Personally, I think the best bet is to
> alter caller's semantics slightly (in fact I think that the
> optimization will make it more likely that caller(1) will return the
> right thing.)

And all eyes are now on Larry...

> > Mental note:
> >
> > 1. Don't use recursion in Perl, it'll be much slower than an
> >    iterative approach
> > 2. If in doubt, refer to note 1.
> 
> Certainly will be slower in Perl 5. Hopefully what won't be the case
> in Perl 6 (having had to recast code from tail recursive form
> explicitly iterative form, I'd really rather not have to do that in
> the general case.)

Will function calls be faster in Perl 6, in general?  Using a simple
benchmark, an empty subroutine called with no arguments took around
1500 machine cycles to execute on Perl 5.  Surely a nice new JIT and
better VM should make function calls less expensive, tight loops in
general are a bad idea in Perl 5 - no inlining.

Jonathan Paton

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

Reply via email to