|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Pavel Ammosov 2:5020/400 28 Oct 2001 16:36:44 To : Serge Matveev Subject : Re: Вопрос -------------------------------------------------------------------------------- Serge Matveev wrote: SM> Дано: массив чисел @array. SM> Требуется: сумма элементов массива. SM> Вопрос: Является ли вариант SM> eval(join("+",@votes)) SM> менее эффективным чем простой цикл с суммировнием, а если да, то SM> в чем и на сколько? Да, строковой eval будет каждый раз перекомпилироватся, что приведет к большим тормозам. #!/usr/bin/perl -w use strict; use Benchmark; my @foo; for (1 .. 200) { push @foo, int(rand(300)); } timethese(-5, { # -5 это фича новых perl'ов. Значит исполнять 5 секунд, # минимум 'eval' => sub { my $sum = eval(join("+",@foo)) }, 'for' => sub { my $sum; for (@foo) { $sum += $_ }} , }); perl mt.pl Benchmark: running eval, for, each for at least 5 CPU seconds... eval: 5 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 919.54/s (n=4846) for: 6 wallclock secs ( 5.24 usr + 0.01 sys = 5.25 CPU) @ 8143.62/s (n=42754) Вариант с eval в 9 раз медленнее. SM>Другими словами, большой ли overhead у eval? У eval "строка" - да. у eval {block} - нет. -- Павел Аммосов, email: apavel@aha.ru, icq uin: 19210183 www: http://isabase.philol.msu.ru/~apavel/ --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/657722d38851.html, оценка из 5, голосов 10
|