Dan Sugalski:
> 2) Parrot's Array and SArray values all accept mixed-type data, which
> perl's arrays do *not* do, and as such have some extra speed hits
> that perl arrays don't.
What do you mean?
Perl's arrays do indeed accept mixed data types (see example below).
$ cat addit2.pl
#!/usr/bin/perl
#
# addit2.pl
#
use strict;
sub varargs_adder {
my $sum = 0;
for (my $a = $#_; $a >= 0; --$a) {
$sum += $_[$a];
}
return $sum
}
my $result = 0;
my @args;
$args[0] = 1000;
$args[1] = 7.100;
$args[2] = 87;
$args[3] = "3.87";
$args[4] = "21000000";
for (my $x = 500000; $x >= 0; --$x) {
$result = varargs_adder(@args);
}
print "$result\n";
$ time perl addit2.pl
21001097.97
real 0m2.825s
user 0m2.843s
sys 0m0.015s
$ cat f6.pasm
#
# f6.pasm
#
# array element arguments are created before the loop
#
_main:
new P5, .SArray
set P5, 5
push P5, 1000
push P5, 7.100
push P5, 87
push P5, "3.87"
push P5, "21000000"
set I9, 500000
AGAIN:
dec I9
lt I9, 0, FIN
bsr _varargs_adder
branch AGAIN
FIN:
print N0
print "\n"
end
_varargs_adder:
new P2, .PerlNum
assign P2, 0
set I1, P5
LOOP:
dec I1
lt I1, 0, DONE
set P1, P5[I1]
add P2, P2, P1
branch LOOP
DONE:
set N0, P2
ret
$ time parrot f6.pasm
21001097.970000
real 0m3.925s
user 0m3.936s
sys 0m0.015s
$ time parrot -j f6.pasm
21001094.100000 (note: wrong result and slower with jit)
real 0m11.999s
user 0m12.015s
sys 0m0.000s
__________________________________
Do you Yahoo!?
New Yahoo! Photos - easier uploading and sharing.
http://photos.yahoo.com/