my $t;
sub a {};
sub b {};
multi sub c (1) {};
multi sub c (2) {};
for ^7 {
my $iterations = ^10 ** $_;
say $iterations.max ~ " calls";
$t = now;
for ^$iterations { $_ %% 2 ?? a() !! b() };
say "regular: {now - $t}";
$t = now;
for ^$iterations { c($_ %% 2 ?? 1 !! 2) };
say "multi: {now - $t}";
}
####
1 calls
regular: 0.00630924
multi: 0.0046663
10 calls
regular: 0.00344620
multi: 0.00392575
100 calls
regular: 0.0056468
multi: 0.0079017
1000 calls
regular: 0.0238749
multi: 0.02800533
10000 calls
regular: 0.0541161
multi: 0.287505
100000 calls
regular: 0.43776129
multi: 2.39229575
1000000 calls
regular: 4.45541020
multi: 24.2623499
####
my $t;
class A {};
class B {};
sub a (A $a) {};
sub b (B $a) {};
multi sub c (A $a) {};
multi sub c (B $a) {};
for ^7 {
my $iterations = ^10 ** $_;
say $iterations.max ~ " calls";
$t = now;
for ^$iterations { $_ %% 2 ?? a(A) !! b(B) };
say "regular: {now - $t}";
$t = now;
for ^$iterations { c($_ %% 2 ?? A !! B) };
say "multi: {now - $t}";
}
####
1 calls
regular: 0.00321471
multi: 0.00306454
10 calls
regular: 0.0029107
multi: 0.0029139
100 calls
regular: 0.0032379
multi: 0.00331093
1000 calls
regular: 0.0091466
multi: 0.00742758
10000 calls
regular: 0.04885046
multi: 0.053550
100000 calls
regular: 0.5330036
multi: 0.5973669
1000000 calls
regular: 5.6755910
multi: 5.946978