Исправление Darth_Revan, (текущая версия) :
Я чуть подправил один из них, чтобы быть ближе к первому, и разница нивелировалась.
С моей точки зрения, ты дал интерпретатору возможность просто проигнорировать код.
После чего я решил доработать скрипты, чтобы они делали какую-нибудь номинальную работу более честно. И разница вернулась.
для технической беседы
Это Talks %).
Какой именно тезис ты хочешь показать? То, что ты ждёшь, пока скрипт будет выполняться быстрее? Уже было показано, что дождался.
Именно так. И нет, не дождался.
На замечание, что вызов $*ERR имеет свою цену, кстати, можно довольно нехитро ответить:
#!/usr/bin/env perl
use v5.12;
use warnings;
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
sub main :prototype() {
my $init_time = clock_gettime(CLOCK_MONOTONIC);
my $file = *STDERR;
for (my $i = 0; $i < 10_000; ++$i) {
for (my $j = 0; $j < 10_000; ++$j) {
$file->flush();
}
}
my $now_time = clock_gettime(CLOCK_MONOTONIC);
say STDERR sprintf("%.3fs", $now_time - $init_time);
}
main();
#!/usr/bin/env rakudo
use v6;
sub MAIN() {
my $file := $*ERR;
loop (my int $i = 0; $i < 10_000; ++$i) {
loop (my int $j = 0; $j < 10_000; ++$j) {
$file.flush();
}
}
note sprintf("%.3fs", now - INIT now);
}
$ ./looping_lots.pl
21.570s
$ ./looping_lots.raku
117.365s
Исходная версия Darth_Revan, :
Я чуть подправил один из них, чтобы быть ближе к первому, и разница нивелировалась.
С моей точки зрения, ты дал интерпретатору возможность просто проигнорировать код.
После чего я решил доработать скрипты, чтобы они делали какую-нибудь номинальную работу более честно. И разница вернулась.
для технической беседы
Это Talks %).
Какой именно тезис ты хочешь показать? То, что ты ждёшь, пока скрипт будет выполняться быстрее? Уже было показано, что дождался.
Именно так. И нет, не дождался.
На замечание, что вызов $*ERR имеет свою цену, кстати, можно довольно нехитро ответить:
#!/usr/bin/env perl
use v5.12;
use warnings;
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
sub main :prototype() {
my $init_time = clock_gettime(CLOCK_MONOTONIC);
my $file = *STDERR;
for (my $i = 0; $i < 10_000; ++$i) {
for (my $j = 0; $j < 10_000; ++$j) {
$file->flush();
}
}
my $now_time = clock_gettime(CLOCK_MONOTONIC);
say STDERR sprintf("%.3fs", $now_time - $init_time);
}
main();
#!/usr/bin/env rakudo
use v6;
sub MAIN() {
my $file := $*ERR;
loop (my int $i = 0; $i < 10_000; ++$i) {
loop (my int $j = 0; $j < 10_000; ++$j) {
$file.flush();
}
}
note(sprintf("%.3fs", now - INIT now))
}
$ ./looping_lots.pl
21.570s
$ ./looping_lots.raku
117.365s