SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Не верь никому или разработка
эффективных приложений
Как писать по настоящему
быстрый код
Почему нужно изучать язык, на
котором пишешь.
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>

Weitere ähnliche Inhalte

Was ist angesagt?

Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
guest32215a
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
 
WordPress Cron API
WordPress Cron APIWordPress Cron API
WordPress Cron API
versusbassz
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
 

Was ist angesagt? (19)

Collider
ColliderCollider
Collider
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
 
Приручаем linux-консоль
Приручаем linux-консольПриручаем linux-консоль
Приручаем linux-консоль
 
Функциональные тесты на Perl
Функциональные тесты на PerlФункциональные тесты на Perl
Функциональные тесты на Perl
 
Javascript
JavascriptJavascript
Javascript
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
Nginx.pm
Nginx.pmNginx.pm
Nginx.pm
 
Perl – жив?!
Perl – жив?!Perl – жив?!
Perl – жив?!
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Cобачники против кинофобов
Cобачники против кинофобовCобачники против кинофобов
Cобачники против кинофобов
 
Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP" Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP"
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Контрактное программирование
Контрактное программированиеКонтрактное программирование
Контрактное программирование
 
WordPress Cron API
WordPress Cron APIWordPress Cron API
WordPress Cron API
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 

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

PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
BlackFan
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest
 

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

Как очистить массив
Как очистить массивКак очистить массив
Как очистить массив
 
Perl in practice
Perl in practicePerl in practice
Perl in practice
 
DSLs в Perl
DSLs в PerlDSLs в Perl
DSLs в Perl
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
Антипаттерны модульного тестирования (Донецкий кофе-и-код Сентябрь 2010)
 
Rose::DB
Rose::DBRose::DB
Rose::DB
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
 
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
 

Mehr von Moscow.pm

Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Moscow.pm
 

Mehr von Moscow.pm (9)

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

Kürzlich hochgeladen

Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 

Kürzlich hochgeladen (9)

Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 

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