Über den neuen, coolen Smart-Matching-Operator hatte
ich schon mal etwas geschrieben (Perl 5.10: Smart Matching).
Angeregt durch Michael Schwerns Artikel Smart match beats the hell out of grep() and first() habe ich den dort erwähnten Benchmark ebenfalls einmal ausgeführt. Es stimmt: ~~ kann rasend schnell sein.
Benchmarking Code
#! perl
use Benchmark;
use 5.010;
use List::Util qw(first);
my @array = map { chr(64+int(rand(26)))."$_" } 1..1000;
timethese(100_000, {
'first' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
first { $_ eq $needle } @array;
},
'grep BLOCK' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
grep { $_ eq $needle } @array;
},
'grep EXPR' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
grep $_ eq $needle, @array;
},
'~~' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
$needle ~~ @array;
}
});
Meine Ergebnisse:
Benchmark: timing 100000 iterations of first, grep BLOCK, grep EXPR, ~~...
first: 36 wallclock secs (35.67 usr + 0.00 sys = 35.67 CPU) @ 2803.32/s (n=100000)
grep BLOCK: 21 wallclock secs (21.88 usr + 0.00 sys = 21.88 CPU) @ 4571.43/s (n=100000)
grep EXPR: 22 wallclock secs (21.52 usr + 0.02 sys = 21.53 CPU) @ 4644.47/s (n=100000)
~~: 11 wallclock secs (11.14 usr + 0.00 sys = 11.14 CPU) @ 8975.05/s (n=100000)
Cool und schnell, was will man mehr!
Vorhergehende Artikel von mir zu den neuen Features und Verbesserungen in Perl 5.10:
- Perl 5.10: Smart Matching
- Perl 5.10: logical defined or //
- Perl 5.10: use 5.010;
- Perl 5.10: -Duserelocatableinc relocatable Perl für Linux
- Perl 5.10: Bessere Fehlermeldungen
- Perl 5.10: use feature Stackable File Tests
- Perl 5.10: use feature qw/state/;
- Perl 5.10: use feature qw/say/;
- Perl 5.10.0 parallel zu einem bestehendem Perl installieren
Keine Kommentare:
Kommentar veröffentlichen