Почему Perl быстрее чем язык? - PullRequest
3 голосов
/ 29 апреля 2011

Просто программа hello world program (ниже у вас есть код D и Perl) быстрее в perl (интерпретируемый язык), чем в D (скомпилированный язык).Почему?

//D language (ldc compiler)

import tango.io.Stdout;
void main()
{
    int i=0;
    while (i<1000)
    {
     Stdout("Hola Món").newline;
     i = i+1;
    }
}

и

my $i = 0;
while ($i<1000)
{
    print "Hola Món\n";
    $i = $i+1;
}

, а время:

time perl hello.pm 

real    0m0.047s
user    0m0.004s
sys 0m0.012s

time ./hola
real    0m0.070s
user    0m0.044s
sys 0m0.012s

Почему?

Ответы [ 2 ]

6 голосов
/ 29 апреля 2011

Кажется, что код - это 99% системных вызовов (printf), и Perl, вероятно, действительно хорошо оптимизирует окружающий цикл. Я бы сказал, попробуйте что-нибудь более сложное, что не зависит в большой степени от одного системного вызова.

Кроме того, имеет смысл оптимизировать Perl для быстрого запуска, учитывая его частичную сосредоточенность на дополнении / замене набора инструментов Unix (sed, awk). Так что я думаю, неудивительно, что он работает лучше, чем другие динамические языки для таких компактных программ.

2 голосов
/ 26 декабря 2011

Perl использует выходной буфер, поэтому код не выполняет то же самое, и вашей программе на Perl требуется меньше системных вызовов.
Попробуйте $| = 1; в Perl, чтобы отключить буфер вывода, или используйте построитель строк в D, чтобы получить более сопоставимые результаты.

Кроме того, символ новой строки в D выглядит как вызов функции времени выполнения, которого можно избежать. Чтобы получить максимальную производительность в D, вы можете попробовать использовать статические функции (время компиляции) и собрать всю строку во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...