<div dir="ltr"><div>Привет,</div><div><br></div>Полнейшее расстройство от производительности autodie.<div><br></div><div>Как раз сейчас на p5p в теме про implicit close обсуждается тема связаная с autodie. В perl есть проблема, что если неявный close выполняется с ошибкой, то программист никогда не увидит эту ошибку.</div>
<div><br></div><div style>В процессе обсуждения было предложено решение добавить управление обработкой ошибок как свойства handle'ов, что-то типа $fh->on_error('die') или $fh->on_error('warn') с лексической прагмой для установки дефолтных значений, что-то типа use open::on_error 'die'; Данное решение особого энтузиазма не вызвало, но мне понравилось тем, что может решить проблему и заменить autodie более быстрой реализацией внутри ядра. Для того, чтобы оно появилось в ядре нужно продумать API, обсудить в листе p5p, реализовать и будет оно в 5.20 и/или модулем на CPAN (не знаю можно ли будет портировать решение на старые версии через модуль совместимости).</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/6/18 Denis Evdokimov <span dir="ltr"><<a href="mailto:evdokimov.denis@gmail.com" target="_blank">evdokimov.denis@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>Мои 5 копеек.<br><br># opendir; closedir;<br><br>time perl -e'for(0..1000000){opendir(my $dir, "/usr") or die; closedir $dir or die;}'<br>real    0m2.707s<br>user    0m1.484s<br>sys    0m1.192s<br>

<br>time perl -e'use autodie; for(0..1000000){opendir(my $dir, "/usr"); closedir $dir;}'<br>real    0m19.668s<br>user    0m17.625s<br>sys    0m1.948s<br><br><br># chdir; chdir;<br><br>time perl -e'for(0..1000000){chdir "/usr" or die; chdir "/tmp" or die;}'<br>

real    0m0.849s<br>user    0m0.112s<br>sys    0m0.732s<br><br>time perl -e'use autodie; for(0..1000000){chdir "/usr"; chdir "/tmp"}'<br>real    0m15.357s<br>user    0m14.037s<br>sys    0m1.304s<br>

<br></div># А вот тут мы убеждаемся, что замедляется работа, а не старт<br>time perl -e'use autodie; for(0..1){chdir "/usr"; chdir "/tmp"}'<br><br>real    0m0.052s<br>user    0m0.052s<br>sys    0m0.000s<br>

<br><div><div>P.S. А я так надеялся, что проблема в способе тестирования ((((<br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">17 июня 2013 г., 17:49 пользователь Ruslan Zakirov <span dir="ltr"><<a href="mailto:ruz@bestpractical.com" target="_blank">ruz@bestpractical.com</a>></span> написал:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div class="gmail_extra"><div><br><div class="gmail_quote">2013/6/17 Vladimir Timofeev <span dir="ltr"><<a href="mailto:vovkasm@gmail.com" target="_blank">vovkasm@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="overflow:hidden">autodie on:  3 wallclock secs ( 1.92 usr +  0.17 sys =  2.09 CPU) @<br>
149655.50/s (n=312780)<br>
<div>Benchmark: running autodie off for at least 2 CPU seconds...<br>
</div>autodie off:  1 wallclock secs ( 1.18 usr +  0.89 sys =  2.07 CPU) @<br>
1755538.65/s (n=3633965)</div></blockquote></div><br></div>Я не увидел разницу в количестве цифр. Мне показалось, что порядок 2 раза, а не 20. Тады ой и грустно.<span><font color="#888888"><br><br clear="all">
<div><br></div>-- <br>Best regards, Ruslan.
</font></span></div></div>
<br></div></div><div class="im">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></div></blockquote></div><br></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best regards, Ruslan.
</div>