ݺߣ

ݺߣShare a Scribd company logo
Не верь никому или разработка
эффективных приложений
Как писать по настоящему
быстрый код
Почему нужно изучать язык, на
котором пишешь.
sub str_reverse($) {
return join ’’,
reverse split //,
shift;
}
Почему нужно изучать язык, на
котором пишешь.
my $str = "x"x1000;
cmpthese timethese -1
scalar reverse $str
scalar str_reverse $str
Почему нужно изучать язык, на
котором пишешь.
Rate builtin
custom
custom 8727/s -- -
100%
builtin 1854792/s 21154% -
-
Магии нет.
Есть непонимание процессов.
$money = "Your account: 10$n";
#...
print $money;
$$a = 0;
print $money;
Your account: 10$
Your account: 100$
Магии нет.
Есть непонимание процессов.
$money = "Your account: 10$n";
$a = (substr($money,15,0));
print $money;
$$a = 0;
print $money;
Your account: 10$
Your account: 100$
Не верь предрассудкам
• Предварительная оптимизация
• Экономия на спичках
• *** умнее
• *** быстрее
Доверяй, но проверяй.
for (p=buf;p - buf < s; p+=2)
{ *(uint16_t*) p }
или
for (p=(uint16_t*)buf;p-buf < s;
p++)
{ *p }
Код можно менять.
Как делать это с умом.
0. Понимание
1. Тесты
2. Бенчмарки
Код можно менять.
Как делать это с умом.
0. Понимание
1. Тесты
2. Бенчмарки
Код можно менять.
Как делать это с умом.
0. Понимание
1. Тесты
2. Бенчмарки
-Mre=debug
Devel::Cover
Devel::NYTProf
Примеры
/G…([^012]+?)
015?012/sxogc
Примеры
/G…([^012015]+)
015?012/sxogc
Примеры
/G… ([^012015;]+
(;)?[^012015]*)
015?012/sxogc
if ( defined $3 ) …
Twiggy.
my $in;
my $line;
readit: {
if (defined ( $line = <$r> )) {
$in .= $line;
return if $line eq "n";
redo readit;
}
}
Twiggy.
pipe my $r, my $w
or die "$!";
fh_nonblocking $r,1;
cmpthese timethese -1, {
…
}
Twiggy.
sys => sub {
syswrite $w, $buf
or die "$!";
sysread $r, my $in, 4096
or die "$!";
},
Twiggy.
buf => sub {
syswrite $w, $buf
or die "$!";
read $r, my $in, 4096
or die "$!";
},
Twiggy.
buf2 => sub {
syswrite $w, $buf or die "$!";
my $in;my $line;
readit: {
if (defined ( $line = <$r> )) {
$in .= $line;
return if $line eq "n";
redo readit;
}
}
}
Twiggy.
Rate buf2 buf sys
buf2 278368/s -- -60% -70%
buf 696486/s 150% -- -25%
sys 927395/s 233% 33% --
Fun
if(strncmp(
buf, "HTTP/1.1",
8) == 0) ...
Fun
uint32_t * http11 =
(uint32_t *)
"HTTP/1.1";
Fun
union {
char *c;
uint32_t *i;
} p;
Fun
p.c = buf;
if( *p.i ==
*http11 ) ...
Fun
+485.84%!
Fun
+485.84%!
gcc -O0
Fun
+0.71% :(
gcc -O2
Strings. TIMTOWTDI
my $a = "x"x1000;
$a = substr($a,$l);
substr($a,0,$l,'');
Strings. TIMTOWTDI
my $a = "x"x1000;
$a = substr($a,$l);
substr($a,0,$l,'');
Strings. TIMTOWTDI
my $a = "x"x1000;
$a = substr($a,$l);
substr($a,0,$l,'');
(for perl 5.16)
Mons Anderson
<mons@cpan.org>
<v.perepelitsa@corp.mail.ru>
Ad

Recommended

Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Moscow.pm
Perl: Symbol table
Perl: Symbol table
Elena Shishkina
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
Moscow.pm
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
ygoltsev
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
Positive Hack Days
PHP basic
PHP basic
Noveo
I tmozg js_school
I tmozg js_school
ITmozg
Perl 5.10 и 5.12
Perl 5.10 и 5.12
Andrew Shitov
Collider
Collider
ygoltsev
Написание DSL в Perl
Написание DSL в Perl
mayperl
Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin
PHP Advanced
PHP Advanced
Noveo
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Anatoly Sharifulin
Приручаем linux-консоль
Приручаем linux-консоль
2ГИС Технологии
Функциональные тесты на Perl
Функциональные тесты на Perl
Ilya Zelenchuk
Javascript
Javascript
Vasya Petrov
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
Pavel Vlasov
Nginx.pm
Nginx.pm
Ilya Zelenchuk
Perl – жив?!
Perl – жив?!
Anatoly Sharifulin
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
Cобачники против кинофобов
Cобачники против кинофобов
Lidiya Myalkina
Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP"
Fwdays
Groovy On Grails
Groovy On Grails
guest32215a
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
Контрактное программирование
Контрактное программирование
Ilya Zelenchuk
WordPress Cron API
WordPress Cron API
versusbassz
Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
Как очистить массив
Как очистить массив
Andrew Shitov
Perl in practice
Perl in practice
Oleg Alistratov
DSLs в Perl
DSLs в Perl
Ruslan Zakirov

More Related Content

What's hot (19)

Collider
Collider
ygoltsev
Написание DSL в Perl
Написание DSL в Perl
mayperl
Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin
PHP Advanced
PHP Advanced
Noveo
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Anatoly Sharifulin
Приручаем linux-консоль
Приручаем linux-консоль
2ГИС Технологии
Функциональные тесты на Perl
Функциональные тесты на Perl
Ilya Zelenchuk
Javascript
Javascript
Vasya Petrov
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
Pavel Vlasov
Nginx.pm
Nginx.pm
Ilya Zelenchuk
Perl – жив?!
Perl – жив?!
Anatoly Sharifulin
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
Cобачники против кинофобов
Cобачники против кинофобов
Lidiya Myalkina
Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP"
Fwdays
Groovy On Grails
Groovy On Grails
guest32215a
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
Контрактное программирование
Контрактное программирование
Ilya Zelenchuk
WordPress Cron API
WordPress Cron API
versusbassz
Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
Написание DSL в Perl
Написание DSL в Perl
mayperl
PHP Advanced
PHP Advanced
Noveo
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
Anatoly Sharifulin
Функциональные тесты на Perl
Функциональные тесты на Perl
Ilya Zelenchuk
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
Pavel Vlasov
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
Cобачники против кинофобов
Cобачники против кинофобов
Lidiya Myalkina
Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP"
Fwdays
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
Контрактное программирование
Контрактное программирование
Ilya Zelenchuk
Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark

Similar to Не верь никому или разработка эффективных приложений (Как писать по настоящему быстрый код). Владимир Перепелица. Moscow.pm 4 апреля (13)

Как очистить массив
Как очистить массив
Andrew Shitov
Perl in practice
Perl in practice
Oleg Alistratov
DSLs в Perl
DSLs в Perl
Ruslan Zakirov
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
Ilya Chesnokov
Mojolicious
Mojolicious
Точка Кипения
PHP Tricks
PHP Tricks
BlackFan
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
MitinPavel
Rose::DB
Rose::DB
Иван mrRico
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
Ruslan Begaliev
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
Fwdays
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
DrupalCampDN
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint Kyiv
Как очистить массив
Как очистить массив
Andrew Shitov
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
Ilya Chesnokov
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
MitinPavel
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
Ruslan Begaliev
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
Fwdays
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
DrupalCampDN
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint Kyiv
Ad

More from Moscow.pm (9)

О работе с документами .xls, .xlsx, .rtf
О работе с документами .xls, .xlsx, .rtf
Moscow.pm
Fast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redis
Moscow.pm
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Moscow.pm
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Moscow.pm
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Moscow.pm
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Moscow.pm
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Moscow.pm
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Moscow.pm
О работе с документами .xls, .xlsx, .rtf
О работе с документами .xls, .xlsx, .rtf
Moscow.pm
Fast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redis
Moscow.pm
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Moscow.pm
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Moscow.pm
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Moscow.pm
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Moscow.pm
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Moscow.pm
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Moscow.pm
Ad

Не верь никому или разработка эффективных приложений (Как писать по настоящему быстрый код). Владимир Перепелица. Moscow.pm 4 апреля