On Mon, 24 Oct 2016 03:27:55 -0700, tbrowder wrote:
> On Sat Oct 22 04:24:15 2016, tbrowder wrote:
> > See <https://github.com/tbrowder/perl6-read-write-tests> for a suite
> > of tests that show the differences.
>
> Suite has been updated considerably.
In a benchmark on my local machine, after many improvements, I now see Perl 6
coming out slightly ahead of Perl 5 when the UTF-8 encoding is being used:
$ time perl6 -e 'my $fh = open "longfile"; my $chars = 0; for $fh.lines {
$chars = $chars + .chars }; $fh.close; say $chars'
60000000
real 0m1.081s
user 0m1.168s
sys 0m0.032s
$ time perl -e 'open my $fh, "<:encoding(UTF-8)", "longfile"; my $chars = 0;
while ($_ = <$fh>) { chomp; $chars = $chars + length($_) }; close $fh; print
"$chars\n"'
60000000
real 0m1.110s
user 0m1.088s
sys 0m0.020s
The situation with ASCII/latin-1 is still not quite so rosy:
$ time perl -e 'open my $fh, "<", "longfile"; my $chars = 0; while ($_ = <$fh>)
{ chomp; $chars = $chars + length($_) }; close $fh; print "$chars\n"'
60000000
real 0m0.277s
user 0m0.260s
sys 0m0.016s
$ time ./perl6-m -e 'my $fh = open "longfile", :enc<ascii>; my $chars = 0; for
$fh.lines { $chars = $chars + .chars }; $fh.close; say $chars'
60000000
real 0m0.988s
user 0m1.028s
sys 0m0.068s
Though that's now down to a factor of 3.5x, which is hugely better than the
factor of 9 or 10 before.
What are the conditions for resolving this issue? Clearly the UTF-8 case is
good enough because Perl 6 is winning there, but "much slower" is a bit
subjective, so hard to know when we're there (unless we somehow manage to win
in the ASCII case too...) :-)
/jnthn