Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про...

93
Pragmatic Perl pragmaticperl.com 09/2015 31

Transcript of Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про...

Page 1: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

PragmaticPerl

pragmaticperl.com09/2015

31

Page 2: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Pragmatic Perl 31

pragmaticperl.com

Выпуск 31. Сентябрь 2015

Page 3: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Другие выпуски и форматы журнала всегдаможно загрузить с pragmaticperl.com. С во-просами и предложениями пишите на почту[email protected].

Комментарии к каждой статье есть в html-версии. Подписаться на новые выпуски можнопо ссылке pragmaticperl.com/subscribe.

Авторы статей: Андрей Шитов

Обложка: Марко Иванык

Корректор: Андрей Шитов

Выпускающий редактор: Вячеслав Тиханов-ский

Ревизия: 2015-09-21 19:25

© «Pragmatic Perl»

Page 4: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Оглавление

1 От редактора . . . . . . . . . . 1

2 YAPC::Europe 2015 . . . . . . . 2

3 Прецизионные бенчмарки Perl 24

4 Обзор CPAN за август 2015 г. 55

5 Интервью с Алексеем Капра-новым . . . . . . . . . . . . . . . 70

Page 5: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

1 От редактора

Читайте в этом номере отчет о конферен-ции YAPC::Europe 2015. Если вы тоже былина конференции, присылайте свои отчетыв следующий выпуск!

Друзья, журнал ищет новых авторов. Неупускайте такой возможности! Если у васесть идеи или желание помочь, пожалуй-ста, свяжитесь с нами.

Приятного чтения.

■ Вячеслав Тихановский

Page 6: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

2 YAPC::Europe 2015

Рассказ о конференции

В этом году европейская конференцияYAPC::Europe прошла в начале сентябряв испанском городе Гранада. Мероприя-тие проводилось в одном из комплексовзнаний университета, на «Факультетенаук» (sic). Тема конференции: «Art +Engeneering».

Накануне

Традиционно накануне конференциипроводится неформальная встреча (pre-conference meeting). В университетскомдворике поставили небольшую печку дляпиццы и кран с пивом.

Page 7: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

В этом году расписание составлено так, чтоконференционный день начинался доволь-но рано по программистским меркам — в 9или даже в 08:30.

Организаторы конференции договорилисьс десятком кафе около место проведенияи выдали талоны на питание. Несмотряна крохотные порции тапасов, можнобыло использовать три талона за раз ине потратить ни копейки на еду за всюконференцию :-)

1-й день

На открытии конференции Антон Березинобъявил о решении комитета YEF (YAPCEurope Foundation) о месте проведенияYAPC::Eureop в 2016 году. Она пройдет в

Page 8: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

румынском городе Клуж-Напока. Орга-низаторы — группа Cluj.pm и компанияEvozone — несколько лет назад началиактивную работу по организации перл-мероприятий и с третьей попытки выиг-рали право проведения международногомероприятия.

Далее начался основной контент — докла-ды про перл и только. К сожалению, видео-запись велась только в главном зале, да ито выборочно, так что пересмотреть многиезаписи невозможно. Я выбирал для себя до-клады, преимущественно связанные с Perl6 или с Perl-сообществом.

Page 9: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Леон Тиммерманс. How to contribute toperl5 core

Леон кратенько рассказал о том, как устрое-на разработка Perl 5, о том, что есть спискирассылки, есть IRC, выпускающий релиз-менеджер, документация, которая нуж-дается в обновлении, гит-репозиторий систорией всех версий разработки, начинаяс Perl 1, про существование Фонда под-держки ядра Perl 5, и про то, что слушатьмнения пользователей не всегда обязатель-но (по этому поводу Рейни Урбан заметилв Твиттере: «This is really the perl communityas we know it. A committer publicly calling auser asshole. Nothing changed»).

Доклад переродился в разговоры междуслушателями в зале, эдакий междусобой-чик среди p5p.

Page 10: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Бен Тайлер. Distributed Systems 102:CRDTs for Poets and Perl Hackers

Бен рассказывал о пробемах, возникающихпри репликации распределенных баз дан-ных, в которых обновления могут происхо-дить в непредсказуемое время и в непред-сказуемом месте, и как с этим бороться илижить, и в каких случаях даже на большихобъемах данных не всегда важно иметь иде-ально верную копию данных (например, всчетчике лакйов на Ютубе).

Видимо из-за недостатка времени, докладсодержал лишь общие рассуждения о том,как работать с синхронизацией и реплици-рованием, и не содержал примеров из прак-тики применения этого в жизни.

Page 11: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Рейни Урбан. Using the new compiler inproduction

Рейни в течение нескольких лет работаетнад новым бекендом для компилятора Perl.Его разработка используется в продакшнев продуктах компании cPanel. Основнойпосыл — новый компилятор позволяетсократить расходы на память и часто уско-рить время компиляции программ. Болееподробную информацию следует ожидатьв ближайшее время на сайте perl11.org.

Блиц-доклады

Традиционно день завершается сессиейпятиминутных блиц-докладов, модерируе-мых R Geoffrey Avery.

Page 12: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

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

Кейноут Куртиса «Овида» Поу TurningPoints

В этом году организаторы поставили в рас-писание конференции аж пять кейноутов,примерно по два в сутки: в начале и завер-шении дня.

Page 13: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

В своем выступлении Куртис перечислилосновные моменты, которые повлияли нато, чем Perl был раньше и чем стал сейчас,и что может ожиадать в будущем: O’Reilly,браузер Mosaic, HTML/CGI, Matt’s ScriptArchive, анонс Perl 6 в июне 2000 года.Одновные достижения помимо этого: боль-шое сообщество пользователей, обратнаясовместимость и CPAN Testers.

Система автоматического тестирования —лучшая из имеющихся среди всех языков,поэтому есть смысл не начинать старта-пы на других языках программирования,многие из которых являются временномодными («JavaScript framework of theweek»), а есть смысл выбирать Perl кактехнологию, которая проверена временеми стабильна.

Следующей важной поворотной точкой

Page 14: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

может стать релиз Perl 6 в этом году. Нопри этом неплохо бы подновить perl.com,где последняя статья была опубликованапару лет назад, сделать что-то с Perlmonks,который выглядит сайтом из далекогопрошлого, а use.perl.org вообще закрыт.

И, наконец, есть смысл переименоватьконференцию YAPC (Yet Another PerlConference) обратно в The Perl Conference,потому что другой все равно нет.

2-й день

Соер Экс. State of the [Art] Velociraptor

Очередной открывающий день кейноут,который обычно давал Матт С. Траут. Соерупомянул, что список p5p полон негатива,

Page 15: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

и надо по жизни уважать друг друга, темболее тех, кто работает над ядром Perl 5.

Далее он рассказал, что CPAN Pull RequestChallenge оказался неожиданно успеш-ным: вместо 10-20 человек, о которыхмечтал Нил Бауэрс, подписалось 365.

Очень успешной была конференцияYAPC::Asia. В прошлом году она собра-ла 1300 участников, в нынешнем более2100, причем почти все из Японии (об этойконференции был отдельный рассказ от ееорганизатора).

Далее Соер напомнил, что на 2015 год выпа-ло несколько юбилейных дат: 20 лет спану,10 лет Perl::Critic, какая-то дата Perl::Lint, аеще был создан Фонд поддержки ядра Perl5.

Page 16: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Последние минуты выступления былизаполнены слащавыми словами о том, чтомы семья и надо людить друг друга.

Джессика Роуз. What the Cult of ExpertiseCosts

Джессика устроила интерактивный рас-сказ, с привлечением аудитории о том,кого считать экспертами.

— Кто такой эксперт?

— Тот, кто сделал что-то более одного раза(Глория Уолл).

— Тот, кто может сделать что-то сам без по-сторонней помощи (Герберт Бреунинг).

— Тот, кто потратил на изучение не менее

Page 17: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

10.000 часов (кто-то из зала).

Далее тема перешла на то, стоит ли до-верять экспертам, которые называютэкспертами сами себя. Среди посетиле-тей нашлось много таких, кто готов былпоспорить с докладчицей и с другимиучастниками (Илья, Коно, добавляйте своикомменты к статье!).

Мне эта дискуссия очень понравилось, хо-тя позже я слышал комментарии о том, какнеискренне была докладчица.

Daisuke Maki ( lestrrat ). YAPC::Asia TokyoBehind The Scenes, Or How We Organize AConference For 2000 Attendees

Рассказ главного организатора конферен-ций YAPC::Asia последних лет. Недавно он

Page 18: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

писал у себя в блоге, что он прекращаетзаниматься организацией конференции в2015 году.

Экспресс-статистика: 2130 участников, 90докладов и блиц-докладов, 60 спонсоров,400 записей в блогах, постоянный поток100 Мб/с в сети во время конференции,3500 устройств, подключенных к Wi-Fi,бюджет 26 миллионов йен (175.000 евро); 90организаторов, в том числе 60 волонтерови 22(!) человека, обеспечивающих работуWi-Fi.

В этом году организаторы пользовалисьэлектронной почтой только для общениясо спонсорами, а между собой общались вСлаке.

Спонсорам предлагали «спонсорское ме-ню», где можно было набрать спонсорский

Page 19: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

пакет из доступных опций, вместо тради-ционного деления на уровни спонсорства(золотые и пр.).

Junichi Ishida ( uzulla ). Great Tools HeavilyUsed In Japan, You Don’t Know.

Небольшой доклад о том, что крутого де-лают бешеные японцы(TM) в виде перечнялюдей имодулей, которые они опубликова-ли.

Максим Вуец. Warm and fuzzy textmatching

Рассказ о том, какие методы нечеткогопоиска можно использовать при работе стекстом. Исходная задача Максима была

Page 20: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

смерджить несколько списоков музыкаль-ных записей, по максимуму используякомпьютер для поиска того же названия,но записанного несколько иначе.

Panel Discussion: Growing the Perlcommunity

Дискуссия о том, как вырастить Perl-сообщество. Эндрю Соломон организовалэтот круглый стол, в котором принялоучастие девять человек, из которых троеработают в booking.com, а один десять леткак не занимается перлом, а используетруби.

Модератор попросил участников расска-зать, что они подразумевают под ростомкомьюнити. Ответы были довольно вялы-ми и невнятными.

Page 21: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Я задал вопрос о том, о каком, собстсвен-но, сообществе идет речь: Perl 5 или Perl 6.Ответы примерно поровну разделились на«оба», «Perl 5» и «да хз».

3-й день

Третий конференционный день начался ажв 08:30, причем в отличие от предыдущихдней доклады с самого утра были организо-ваны в четыре потока. В расписании этогодня было собрано много выступлений проPerl 6.

Page 22: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Штефан Сайферт. Building bridges -bringing Perl 5 and Perl 6 back together

Интересный обзорный рассказ о том, какиспользовать Perl 5 в программах на Perl 6и наоборот (или Perl 5 внутри Perl 6 внутриPerl 5).

Салве Нельсон. Perl CommunityBackchannels Session

Салве — движущая сила норвежскихPerl-монгеров. В своем выступлении онперечислил некоторые неочевидные ме-ста, где можно общаться и сообщать мируо перле (например, Hackersplaces) и пере-числил людей из Perl-сообщества, которыемогут помочь с разными вопросами илипросто занимаются интересными вещами.

Page 23: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Габор Сабо. Web development using Perl 6

Доклад о том, какие есть фреймворки, ка-кие естьшаблонизаторы, модули для досту-па к базам данных, показал простое прило-жение «Hello, World!» в браузере. Аплодис-менты.

Алекс Мунтада. Writing tutorials forPerltuts.com

Рассказ о том, как устроен и выглядит сайтperltuts.com, каким образом сделаны стра-ницы уроков на основе POD-файлов, каквставить в текст работающий пример иликак нарисовать график с помощью jQueryи как вставить в урок сопровождающийтест.

Page 24: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Джон Халтинвангер. Whatever, or How IStopped Worrying and Fell in Love with Perl6 Operators

20-минутный рассказ об операторе Perl 6,который называется whatever (*). Наш жур-нал еще не писал об этом.

Тео фан Хуссел. qué les hablas mi lenguaje

Доклад появился в расписании в послед-нюю минуту, потому что накануне ДжефГоф сломал ногу и не смог появиться наконференции в этот день.

Тео работает над переделкой Акта (фрейм-ворка для сайтов конференций), под этуработу был выделен некий грант. Рассказбыл о том, что существует HTTP-заголовок

Page 25: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Accept−Language, который можно ис-пользовать, чтобы отдавать сайт на разныхязыках :-o.

Элизабет Маттайсен. Parallelism,Concurrency, and Asynchrony in Perl 6

Лиз прочитала доклад, подготовленныйДжонатаном Вортингтоном, который вэтот раз не смог приехать (он переехал вПрагу, женился, вот все вот это).

Слайды как всегда очень подробные: ихможно просто брать и читать как статью.Тема доклада касалась ключевых словPerl 6 start, await, race, hyper, supply,whenever, emit, react, классах Proc::Async и OO::Monitor (он предлагает словаmonitor и actor, аналогичные class) ивстроенных функций типа map и grep

Page 26: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

, которые могут работать параллельнобез особых дополнительных усилий состороны разработчика.

Ларри Уолл. Get Ready To Party!

Ларри повторил свой доклад, который онсделал в феврале этого года на конферен-ции FOSDEM в Брюсселе. Наш журнал ужеписал об этом. На YAPC::Europe велась ви-деозапись, так что этот доклад можно по-смотреть в интернете.

Блиц-доклады

Третий день закончился третьей сериейблиц-докладов. Антон Березин сообщило возможных изменениях в деятельно-

Page 27: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

сти YAPC Europe Foundation. Я рассказалпро сайт с обложками книг по перлу ипопросил японцев прислать мне парочкукартинок. Через несколько минут lestrratответил со сцены скриншотом с японскойкниги на Амазоне и сделал смешной блицна японском языке. Видео этого докладаесть на Ютубе.

■ Андрей Шитов

Page 28: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

3 Прецизионные бенчмарки Perl

Какой Perl самый быстрый? Имеет ли смыслпереходить на cperl или stableperl? Возмож-но ли провести точное сравнение производи-тельности разных perl?

Бенчмарки по-настоящемусложны

Если вы смотрели доклад Питера Рэббит-сона «Benchmarking is REALLY hard», топомните, что выполнение бенчмарков —зто нетривиальная задача. Основа боль-шинства бенчмарков — это измерениевремени, за которое выполняется тести-руемый фрагмент кода. Данная метриказависит от множества факторов, которые

Page 29: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

вносят большую погрешность в измеряе-мую величину:

• Динамическая тактовая частота про-цессора: современные процессорымогут «саморазгоняться» или, на-оборот, снижать тактовую частоту вслучае перегрева или включать ре-жим экономии энергии. Кроме того,может наблюдаться нестабильностьтактовой частоты при использованиидешёвых комплектующих.

• Многоуровневая система кешей впроцессоре: в зависимости от числа«промахов» время выполнение одно-го и того же кода может существенноизменяться от запуска к запуску.

• Конкуренция за процессорное вре-мя: операционная система может

Page 30: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

выделять тестируемому процессуразличное число тиков процессорно-го времени в зависимости от текущейзагрузки и наличия других фоновыхпроцессов.

Таким образом, во всех подобных бенч-марках возникает случайная погрешность,которую пытаются устранить проведениемсерии из большого числа измерений ивычислением средних значений. Всё жепогрешность может оказаться существен-ной, и вычисленное ускорение на 5% можетна самом деле оказаться замедлением на5% и наоборот.

Page 31: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Сферический код в вакууме

Можно ли устранить все побочные эффек-ты и получить чистые измерения скоростиработы кода? Для ответа на этот вопроспопробуем обратиться к архитектуре со-временных процессоров. Компьютерына архитектуре фон Неймана использу-ют память для хранения инструкций иданных и процессор для выполнения опе-раций. В процессор загружается очереднаяинструкция из памяти, и происходит её вы-полнение. В современных системах частотаработы процессора и памяти существенноразличаются, к примеру, доступ в основ-ную память может занимать до 200 цикловпроцессора, поэтому работа с памятьюстановится «бутылочным горлышком» впроизводительности системы.

Чтобы ускорить работу с памятью, была

Page 32: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

создана система кешей — быстрой памяти,расположенной внутри процессора, кудапредварительно загружаются фрагментыосновной памяти, что ускоряет доступ.Может использоваться два и больше уров-ней кеша, которые различаются по объёмупамяти и скорости работы. Например, кешпервого уровня L1 может составлять 64 КБи требовать для загрузки порядка 10 тактов.Таким образом, код, использующий 100элементов данных, которые окажутся вкеше, будет загружен на 95% быстрее, чемв случае загрузки их из памяти (так назы-ваемый «кеш-промах»). Как правило, кешраздельно хранит инструкции и данные,поскольку промах при загрузке инструк-ции выливается в простой процессора, вто время как промах в данных позволяетвыполнять следующие инструкции, поэто-му они не должны конкурировать междусобой за место в кеше.

Page 33: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Конечно, 64 КБ это слишком мало посравнению с текущими объёмами опера-тивной памяти, поэтому далее может идтикеш второго уровня большего объёма, номеньшей скорости доступа, и так далее.Практическое значение имеет лишь объёмпоследнего уровня кеша, поскольку разрывв скорости доступа между ним и обычнойпамятью самый большой. На современ-ных процессорах объём этого кеша можетсоставлять 8 МБ и больше.

Таким образом, скорость выполнениякода напрямую зависит от количествазагружаемых инструкций и данных, атакже количества промахов в кешах. Так-же имеет большое значение правильноепредсказание условных переходов, т.е.чтобы последующие инструкции заранееоказались в кеше.

Page 34: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Cachegrind

На сегодняшний день существует инстру-мент, который позволяет измерить описан-ные выше характеристики — профайлер ке-ша cachegrind утилиты valgrind.

В отличие от специализированных профай-леров, например, perf для Linux, cachegrindиспользует симуляцию процессора, си-стемы кешей и предсказания условных икосвенных переходов. С одной стороны,полученные результаты могут отличатьсяот данных на реальных процессорах, но, сдругой стороны, это работает на множестверазличных архитектур и операционныхсистем, не зависит от текущей загрузкисистемы, даёт высокую воспроизводимостьрезультатов, позволяя проводить точныесравнения производительности.

Page 35: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Рассмотрим пример, для программы наperl, которая выводит слово hi на экран:1 $ valgrind −−tool=cachegrind −−

branch−sim=yes \2 −−cachegrind−out−file=/dev/

null \3 perl −e 'print "hi\n"'45 ==19617== Cachegrind, a cache and

branch−prediction profiler6 ==19617== Copyright (C)

2002−2013, and GNU GPL'd, byNicholas Nethercote et al.

7 ==19617== Using Valgrind−3.10.0.SVN and LibVEX; rerun with −hfor copyright info

8 ==19617== Command: perl −e print\"hi\\n"

9 ==19617==10 hi11 ==19617==12 ==19617== I refs:

Page 36: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

1,129,63313 ==19617== I1 misses:

4,61814 ==19617== LLi misses:

3,16815 ==19617== I1 miss rate:

0.40%16 ==19617== LLi miss rate:

0.28%17 ==19617==18 ==19617== D refs:

407,661 (264,407 rd +143,254 wr)

19 ==19617== D1 misses:11,694 ( 7,945 rd +3,749 wr)

20 ==19617== LLd misses:7,612 ( 4,354 rd + 3,258wr)

21 ==19617== D1 miss rate:2.8% ( 3.0% + 2.6%)

22 ==19617== LLd miss rate:

Page 37: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

1.8% ( 1.6% + 2.2%)

23 ==19617==24 ==19617== LL refs:

16,312 ( 12,563 rd +3,749 wr)

25 ==19617== LL misses:10,780 ( 7,522 rd +3,258 wr)

26 ==19617== LL miss rate:0.7% ( 0.5% + 2.2%)

27 ==19617==28 ==19617== Branches:

200,099 (194,318 cond +5,781 ind)

29 ==19617== Mispredicts:17,627 ( 16,447 cond +1,180 ind)

30 ==19617== Mispred rate:8.8% ( 8.4% + 20.4%)

Page 38: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

О чём говорит полученный вывод:

• I refs — количество загруженных ин-струкций;

• I1 misses — число промахов в ке-ше первого уровня при загрузкеинструкций;

• LLi misses — число промахов в ке-ше последнего уровня при загрузкеинструкций;

• I1/LLi miss rate — соответствующая до-ля промахов в кешах в процентах;

• D refs — количество операций с дан-ными (суммарно для чтения и запи-си);

• D1 misses — число промахов в кешепервого уровня при операциях с дан-

Page 39: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

ными (суммарно для чтения и запи-си);

• LLd misses — число промахов в кешепоследнего уровня при операцияхс данными (суммарно для чтения изаписи);

• D1/LLd miss rate — соответствующаядоля промахов в кешах в процентах;

• LL refs — сумма промахов в кеше пер-вого уровня I1 + D1;

• LL misses — сумма промахов в кешепоследнего уровня LLi + LLd;

• LL miss rate – доля промахов в кешахдля данных и инструкций в процен-тах;

• Branches — общее число переходов(условных и косвенных);

Page 40: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

• Mispredicts — число ошибок предска-зания перехода;

• Mispred rate — доля ошибок предска-заний перехода в процентах.

Если несколько раз повторить запуск ко-манды, то можно увидеть, что каждыйраз будет выводиться примерно одни ите же цифры с точностью до пятой(!) зна-чащей цифры. Это означает, что можновыявить даже небольшие изменения впроизводительности. Например, добавивоперацию конкатенации в программе:perl −e 'print "hi"."\n"', можноувидеть, что это будет стоить нам загрузкидополнительно порядка 6000 инструкцийи 3000 данных.

Page 41: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Сравнение производительностиразных версий Perl

В дереве исходников Perl есть утилитаPorting/bench.pl, которая под капотомиспользует cachegrind и может проводитьсравнение производительности для раз-личных версий Perl. Она использует толькобазовые модули и работает на perl ≥ 5.10,поэтому её можно свободно загрузить ииспользовать отдельно от исходного кодаPerl.

В оригинальном анонсе утилиты bench.plпоказывалось сравнение пяти последнихна тот момент стабильных версий perl иразрабатываемой версии perl 5.21.6:1 $ Porting/bench.pl −j 8 \2 perl5125o perl5144o

perl5163o perl5182o

Page 42: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

perl5201o perl5216o3 ...4 expr::assign::scalar_lex5 lexical $x = 167 perl5125o perl5144o

perl5163o perl5182operl5201o

perl5216o8 −−−−−−−−− −−−−−−−−−

−−−−−−−−− −−−−−−−−−−−−−−−−−−

−−−−−−−−−9 Ir 100.00 107.05

101.83 106.37107.74 103.73

10 Dr 100.00 103.64100.00 105.56105.56 100.00

11 Dw 100.00 100.0096.77 100.00

100.00 96.7712 COND 100.00 120.83

Page 43: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

116.00 126.09126.09 120.83

13 IND 100.00 80.0080.00 80.0080.00 80.00

1415 COND_m 100.00 100.00

100.00 100.00100.00 100.00

16 IND_m 100.00 100.00100.00 100.00

100.00 100.001718 Ir_m1 100.00 100.00

100.00 100.00100.00 100.00

19 Dr_m1 100.00 100.00100.00 100.00

100.00 100.0020 Dw_m1 100.00 100.00

100.00 100.00100.00 100.00

21

Page 44: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

22 Ir_mm 100.00 100.00100.00 100.00

100.00 100.0023 Dr_mm 100.00 100.00

100.00 100.00100.00 100.00

24 Dw_mm 100.00 100.00100.00 100.00

100.00 100.00

В данном примере сравнивалось, как ме-нялась производительность простейшейоперации присвоения значения лексиче-ской переменной $x = 1. Все указанныецифры — относительные, от первого зна-чения, т.е. в сравнении с perl 5.12.5. Чембольше значение, тем лучше (меньшереальных операций). Наименование строкв первой колонке соответствуют даннымcachegrind: Ir — чтение инструкций, Dr— чтение данных, Dw — запись данных,

Page 45: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

COND и IND — количество условных икосвенных переходов, суффикс m означаетсоответствующие «промахи» в кешах.

Здесь была замечена регрессия в произво-дительности между perl 5.20.1 и perl 5.21.6по показателю Ir: 107.74 против 103.73. Спомощью git bisect удалось найти, чтоэто связано с коммитом, в котором нача-лась использоваться опция компилятора,закручивающая гайки в безопасности,−fstack−protector−strong, которая ипривела к замедлению работы perl.

Как работает утилита bench.pl?

Утилита используетфайл t/perf/benchmarks,в котором перечислены множество неболь-ших тестов в следующем формате:

Page 46: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

1 'expr::assign::scalar_lex' => {2 desc => 'lexical $x = 1',3 setup => 'my $x',4 code => '$x = 1',5 },

Поле desc описывает суть теста, setup —некоторый инициализирующий код, за-тем code — собственно код, который будеттестироваться.

Для каждого подобного теста утилитасоздаёт тестовый скрипт вида:1 package $test;2 BEGIN { srand(0) }3 $setup;4 for my \$__loop__ (1..\$ARGV[0])

{5 $code;6 }

Page 47: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Где $setup — это код инициализации,$code — тестируемый код. Утилита делаетзапуски со значением итераций цикла 10(short) и 20 (long), с пустым тестируемымкодом и актуальным тестируемым кодом(всего четыре запуска valgrind). Такимобразом, можно рассчитать и убрать овер-хед, вносимый кодом инициализации, исравнивать только тестируемый код.

Для чего можно применять bench.plобычным пользователям?

Утилита bench.pl может быть полезнаобычным пользователям, например, чтобытестировать своё приложение для работына новых версиях Perl. Критические кпроизводительности участки кода могутбыть вынесены в виде отдельного теста ипрогоняться на blead или других версиях

Page 48: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Perl, чтобы заранее обнаружить регрессиипроизводительности и начать бить тревогу.

Утилиту bench.pl также можно использо-вать и для привычных бенчмарков, когдасравнивается не perl, а код программы. На-пример, если есть матрица 101x101, то чтобыстрее: записывать в колонку или ряд?Для этого можно создать файл с тестамиmy.bench:1 [2 'test1' => {3 'desc' => 'row',4 'setup' => 'my @x; $x

[100][100] = 1',5 'code' => '$x[100][$_]=1

for 0..100'6 },7 'test2' => {8 'desc' => 'col',9 'setup' => 'my @x; $x

[100][100] = 1',

Page 49: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

10 'code' => '$x[$_][100]=1for 0..100 '

11 }12 ]

Далее запустим с параметром −−raw,который покажет не относительные ре-зультаты, а фактические:1 $ bench.pl −j 8 −−benchfile=my.

bench \2 −−fields=Ir,Dr,Dw,COND,IND,

COND_m,IND_m \3 −−raw perl45 test16 row78 perl9 −−−−−−−−

10 Ir 77847.011 Dr 27711.012 Dw 12982.0

Page 50: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

13 COND 11314.014 IND 1435.015 COND_m 108.016 IND_m 1128.01718 test219 col2021 perl22 −−−−−−−−23 Ir 77847.024 Dr 27711.025 Dw 12982.026 COND 11314.027 IND 1435.028 COND_m 107.029 IND_m 1128.0

Ответ: абсолютно всё равно.

Page 51: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Сравнение производительностиperl 5.22.0, stableperl 1.001, cperl5.22.1

После выпуска Perl 5.22.0 произошёл расколв Perl-сообществе, проявившийся в видесерии форков: сначала stableperl от МаркаЛеманна, затем cperl от Рейни Урбана. Ихобъединяет несогласие с официальнымнаправлением развития Perl, когда возни-кают нарушения обратной совместимостиили принимаются спорные решения вреализации тех или иных новшеств безвсестороннего обсуждения.

Положительныймомент в данной истории,это возможность сторонним наблюдателямоценить для себя, насколько импо душе тотили иной путь развития.

Page 52: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Попробуем сравнить производительностьэтих трёх реализаций: perl 5.22.0, cperl 5.22.1и stableperl-1.001.

Можно воспользоваться perlbrew для уста-новки подопытных:1 # perl 5.22.02 $ perlbrew install perl−5.22.034 # stableperl 1.0015 $ perlbrew install −−as=

stableperl−1.001 \6 http://stableperl.schmorp.de/

dist/stableperl−5.22.0−1.001.tar.gz

78 # cperl 5.22.19 # хак: имя каталога внутри архива

не соответствует имени архива10 $ wget https://github.com/perl11/

cperl/archive/cperl−5.22.1.tar.gz \

Page 53: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

11 −O cperl−cperl−5.22.1.tar.gz12 $ perlbrew install −−as=cperl

−5.22.1 $(pwd)/cperl−cperl−5.22.1.tar.gz

Загрузим скрипт bench.pl:1 $ wget http://perl5.git.perl.org/

perl.git/blob_plain/blead:/Porting/bench.pl

Загрузим файл бенчмарков:1 $ wget http://perl5.git.perl.org/

perl.git/blob_plain/blead:/t/perf/benchmarks

Запустим бенчмарк:1 $ bench.pl −j 8 −−benchfile=

benchmarks \2 $PERLBREW_ROOT/perls/perl

−5.22.0/bin/perl5.22.0=

Page 54: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

perl5220 \3 $PERLBREW_ROOT/perls/

stableperl−1.001/bin/perl5.22.0=stable5220 \

4 $PERLBREW_ROOT/perls/cperl−5.22.1/bin/cperl5.22.1=cperl5221

В результате получим простыню с резуль-татами тестов по всем тестируемым микро-операциям, последним будет идти среднеезначение производительности по всем те-стам:1 AVERAGE23 perl5220 stable5220

cperl52214 −−−−−−−− −−−−−−−−−−

−−−−−−−−−5 Ir 100.00 101.37

101.196 Dr 100.00 100.39

Page 55: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

100.607 Dw 100.00 100.00

98.778 COND 100.00 100.00

99.769 IND 100.00 100.00

100.001011 COND_m 100.00 96.17

62.2312 IND_m 100.00 100.00

100.001314 Ir_m1 100.00 100.55

100.0015 Dr_m1 100.00 100.00

100.0016 Dw_m1 100.00 100.00

100.001718 Ir_mm 100.00 100.00

100.0019 Dr_mm 100.00 100.00

Page 56: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

100.0020 Dw_mm 100.00 100.00

100.00

В среднем показатели близки (кроме зава-ла на промахах с условными переходамив cperl), но, возможно они имеет такой жесмысл, как и средняя температура по боль-нице. Поэтому лучше посмотреть те тесты,в которых есть существенные различия.

Например, практически во всех тестах, гдеиспользуются операции с хешами, заметнопроигрывает Perl 5.22:1 expr::hash::ref_lex_2var2 lexical $hashref−>{$k1}{$k2}34 perl stableperl cperl5 −−−−−− −−−−−−−−−− −−−−−−6 Ir 100.00 120.42 119.167 Dr 100.00 105.10 106.45

Page 57: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

8 Dw 100.00 100.00 93.949 COND 100.00 100.00 100.00

10 IND 100.00 100.00 100.001112 COND_m 100.00 100.00 111.1113 IND_m 100.00 100.00 100.00

Это объясняется тем, что как в cperl, так иstableperl по умолчанию используется хеш-функция FNV-1A, которая существеннобыстрее медленной, но более безопаснойдефолтовой хеш-функции Perl.

В остальных тестах сохраняется практиче-ски полный паритет.

Page 58: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Выводы

Безусловно, cachegrind даёт большиевозможности для проведения замеров про-изводительности. К сожалению, данные невсегда удобно сравнивать, поскольку нетабсолютных значений затраченных цик-лов процессора. В любом случае, радует,что при разработке Perl начали проводитьтестирование на регресс производительно-сти.

■ Владимир Леттиев

Page 59: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

4 Обзор CPAN за август 2015 г.

Рубрика с обзором интересных новинок CPANза прошедший месяц

Статистика

• Новых дистрибутивов — 155• Новых выпусков — 804

Новые модули

HTTP::PublicKeyPins

Модуль HTTP::PublicKeyPins позво-ляет генерировать специальные HTTP-

Page 60: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

заголовки для привязки публичного клю-ча сервера в соответствии с RFC 7469. Этопозволяет веб-браузерам запоминать нанекоторое время сертификат веб-ресурса ипротивостоять возможным MITM-атакам(например, в случае компрометации цен-тра сертификации).

C::Blocks

С помощью C::Blocks становится воз-можным делать вставки C-кода внутриPerl-программ. В отличии от схожих пофункционалу модулей, как например,Inline::C, в C::Blocks возможно ис-пользовать также Perl-переменные внутриC-кода:1 # расчёт суммы целых

положительных чисел от 1 до100

Page 61: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

2 my $N = 100;3 my $result;4 cblock {5 int i;6 int result = 0;7 int N = SvIV($N); /* скаляр

$N */8 for (i = 1; i < N; i++)

result += i;9 sv_setiv($result, result); /*

скаляр $result */10 }11 print "Сумма чисел от 1 до $N =

$result\n";

Crypt::HSXKPasswd

Модуль содержит утилиту hsxkpasswd,которая позволяет создавать надёжныепароли, устойчивые к атакам грубым

Page 62: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

перебором и по словарю, но при этомих достаточно просто запомнить. Идеямодуля возникла по мотивам известногокомикса XKCD №936 и online-сервиса grcпо оценке сложности пароля.1 # Какие ассоциации вызывает у вас

следующий пароль?2 $ hsxkpasswd3 ==89&drink&PATTERN&holland&17==

Menlo

Menlo — это кодовое имя для CPAN-клиента cpanm версии 2.0. Основнаяпредпосылка для создания menlo —упростить дальнейшее развитие cpanmс возможностью создания плагинов, хуков,скриптового API. Всё это было раньшезатрудненно из-за способа реализации

Page 63: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

cpanm: огромный класс и зависимые мо-дули, упакованные в один исполняемыйфайл. На данный момент Menlo — этоотдельная ветка в git-репозитории cpanm ипока находится в стадии разработки.

HTTP::Headers::Fast::XS

HTTP::Headers::Fast::XS — это XS-реализация модуля HTTP::Headers::Fast. Судя по бенчмарку, модуль внесколько раз быстрее HTTP::Headers/HTTP::Headers::Fast.

PDLA

PDLA — это форк известного модуля PDL —языка данных Perl для научных расчётов

Page 64: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

и работы с многомерными массивамиданных. Акроним PDLA расшифровыва-ется как PDL Agile, и основная цель форкаускорить и упростить разработку PDL.Текущий PDL будет поддерживаться, всеисправления в PDL будут портироватьсяв PDLA. Отказ от использования имениPDL3 в пользу DPLA был мотивированотрицательным примером Perl 5 с Perl 6.

Обновлённые модули

DBI 1.634

Новый релиз универсального интерфейсак базам данным DBI содержит нескольконебольших исправлений и улучшений.Кроме того, теперь каждый модуль дистри-бутива содержит прагму use strict, и

Page 65: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

хотя это изменение достаточно тривиаль-ное, есть вероятность того, что это сломаетчей-то работающий код. Поэтому следуетвнимательно протестировать релиз передотправкой в рабочее окружение.

Devel::NYTProf 6.02

Обновлён мощный профайлер Perl-кодаDevel::NYTProf. В новой версии по-явилась возможность поиска по именифункции на генерируемых страницах«огненных графиков» (Flame Graph). Так-же обновлена зависимость с JSON::Any(модуль устарел и не поддерживается) наJSON::MaybeXS.

Page 66: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

ExtUtils::MakeMaker 7.06

После 29 пробных релизов вышел новыйстабильный релиз модуля ExtUtils::MakeMaker для генерации мейк-файлов.Выпуск содержит множество исправленийошибок, а также новые возможности, на-пример, PREREQS теперь поддерживаетуказание диапазона версий. Переработанаподдержка XS-модулей, появилась опцияXSMULTI=>1, которая позволяет помещатьнесколько xs-файлов в одном каталоге в lib.

Mouse 2.4.5

Новые версии Mouse содержит важныеисправления для работы модуля на Perl ≥5.22.0 с поддержкой тредов, также исправ-лена сборка модуля на старых версиях Perl

Page 67: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

≤ 5.14. Теперь новый майнтейнер — SyoheiYoshida, который подхватил сопровожде-ние модуля у Fuji Goro.

Text::Xslate 3.3.7

Обновлённая версия шаблонизатора Text::Xslate также была выпущена новыммайнтейнером: Syohei Yoshida. Исправленаработа на Perl ≥ 5.22.0 и возвращена воз-можность сборки на Perl 5.8.8. Исправленаошибка в работе директивы INCLUDEвнутри фильтров.

Git::CPAN::Patch 2.2.0

Вышла новая версия утилиты git−cpan, которая позволяет импортировать

Page 68: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

любой CPAN-модуль в локальный git-репозиторий с полной историей релизови одной командой отправлять патчи вCPAN RT-трекер. В новой версии появи-лась возможность интерактивного вызоваsend-email (например, чтобы ввести smtp-пароль), а также сохранение имени модуляв конфиге git.

Feersum 1.403

Обновлён PSGI-совместимый веб-серверFeersum. В новой версии появилась под-держка метода OPTIONS.

Page 69: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Mail::IMAPClient 3.37

После длительного перерыва вышло обнов-ление популярного IMAP-клиента Mail::IMAPClient. Исправлено множество оши-бок, долгое время висевших в RT-трекере,включая исправление ошибки аутентифи-кации для пользователей с обратным сле-шем в имени.

Perl::Tidy 20150815

Perl::Tidy—модуль для разбора иформа-тирование исходного кода на Perl. В новойверсии исправлено множество ошибок. По-явилась новая опция−utf8, которая интер-претирует входной и выходной поток кактекст в кодировке UTF-8, что, в частности,исправляет проблему с форматированием

Page 70: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

юникодных строк в исходном коде, позво-ляя правильно вычислять их ширину.

Pod::Markdown 3.002

Вышла новая мажорная версия модуляPod::Markdown для конвертированияPOD-документации в формат Markdown.Есть определённые изменения в API,исправлены проблема с кодированиемсимволов & и < в ситуациях, когда они недолжны трактоваться как HTML-разметка.В состав дистрибутива теперь входит мо-дуль Pod::Perldoc::ToMarkdown, чтопозволяет отображать POD-документациюв формате Markdown с помощью командыperldoc:1 $ perldoc −o Markdown Plack::

Handler

Page 71: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

App::Sqitch 0.9993

Утилита sqitch — это полноценная систе-ма для управления изменениями в базеданных, позволяющая проводить контро-лируемые обновления и откаты схемы иданных, независимая от используемойСУБД, ОРМ и фреймворков. В новой вер-сии множество исправлений и улучшений,также появилась концепция «каталогапеределок» (reworked directory), когда прибольшом числе переделок становится тя-жело визуально (или в IDE) отслеживатьдругие скрипты изменений, теперь можноперенести все переделки в отдельныйкаталог.

Page 72: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Image::ExifTool 10.00

Вышел новый мажорный релиз модуляImage::ExifTool для чтения и записимета-информации для множества фор-матов файлов, создаваемых цифровымикамерами различных производителей. Но-вый релиз содержит информацию о новыхтипах камер и объективов. Версия 10.00отмечена как текущая стабильная версия.

HTML::Shakan 2.02

Обновлён модуль генератора и валидато-ра HTML-форм HTML::Shakan. В новойверсии исправлена XSS-уязвимость вформировании виджета textarea.

Page 73: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Win32 0.52

Вышел новый релиз модуля Win32 для до-ступа к Win32 API на платформе Windows.В новой версии реализована базовая под-держка Windows 10.

■ Владимир Леттиев

Page 74: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

5 Интервью с Алексеем Капрановым

Алексей Капранов (kappa)— Perl-программистсо стажем, менеджер крупных проектов наPerl и не только

Как и когда научился программировать?

Начал что-то программировать в 1993 го-ду, когда учился в 9-м классе. Это былиИскры-1030 (советский аналог IBM PCXT, гениальные машины с хардвернойклавишей рус/lat на клавиатуре и ручкойгромкости у спикера) c GW-BASIC-ом. Тамещё надо было нумеровать строки. В отли-чие от многих ровесников у меня в жизнипочти совсем не было не-интеловских ма-шинок, таких как Спектрумы или БК-шки.Чуть-чуть зацепил УКНЦ, где нам препода-вали Школьный Алгоритмический Язык.

Page 75: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Очень, кстати, хороший. Я писал к немунебольшой компилятор в Parrot VM.

Увлёкся программированием очень быст-ро, начал ходить в олимпиадную группу,пересел на Турбо Паскаль. Тогда нас началипускать за “двойки” с цветными экранами.Через год-два уже что-то там выигрывал.

А дальше я пошёл учиться на профессио-нального программиста в БГТУ. Ну и понес-лось.

Какой редактор используешь?

Работаю в vim, но в последнее время врамках личной программы расширениягоризонтов живу в режиме alias vim ='echo use emacs' + spacemacs. Получает-ся, хотя и чертыхаюсь иногда. vi для меняродной.

Page 76: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Как и когда познакомился с Perl?

Уже в институте, опять же расширяяличные горизонты, пробовал разные опе-рационки. Пожил пару недель на моднойв те годы OS/2, плюнул, поставил FreeBSD2.1.7 — Линукс тогда в Брянске найти былосложнее. FreeBSD меня полностью поглоти-ла — в первую очередь своей открытостьюк любопытному пользователю. Постоян-ного доступа в интернет не было, но ибазовая система предоставляла настолькомного всего, что хватило надолго. И тамбыл Перл (правда, сначала четвёртый, ко-торый совсем без ООП). К третьему курсуя начал делать на Перле все институтскиезадания. В конце концов дошло до того,что и дипломная работа у меня состоялаиз десятка скриптов, соединённых черезпайпы и inetd.

Page 77: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

С какими другими языками интересноработать?

Следующий мой любимый язык после Пер-ла — Лисп, причём не конкретная реализа-ция, а всё семейство и сам принцип, когдав качестве исходного кода программист пи-шет сразу AST. СовременныйЛисп, на кото-ром я иногда пишу, это Clojure, хотя в нём ичувствуется некоторое предательство в уго-ду практичности (например, ограниченияв recur или отдельные контейнерные типыкроме списков).

Очень люблю чистый Си, но не C++. Счи-таю, что реализация ООП в C++ грязная, хо-тя и очень мощная. Её подчистили и дове-ли до приличного вида только в Java.

Много кода написал на Яваскрипте.

Page 78: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

В принципе, сейчас уже могу с удоволь-ствием писать на чём угодно, если там естьанонимные функции.

Что, по-твоему, является самым боль-шим преимуществом Perl?

Это один из вопросов, сильно привязанныхк контексту сравнения. Я убеждён, что всеконкретные технические преимущества загоды были повторены в других языках —начиная от очевидных регексов и заканчи-вая CPAN-ом. Перл же, во-первых, осталсяудобной комбинацией таких преиму-ществ (достаточно быстрый, достаточномощный, отлично поддерживает Unicode,имеет культуру тестирования и обратнойсовместимости и так далее), а во-вторыхнарастил себе уникальное сообщество.

Что, по-твоему, является самой важной

Page 79: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

особенностью языков будущего?

Название начинается на „J“, а заканчи-вается на „T“. Ближайшее будущее, мнекажется, это время полного доминирова-ния JavaScript везде. Интересно, что у негонет никаких выдающихся особенностей,которые привели к такому положению ве-щей. Он просто выиграл в лотерею, когдастал ассемблером веб-страничек в NetscapeNavigator-е.

Я не уверен, что развитие языков про-граммирования будет продолжаться бес-конечно. Мне кажется, что мы близки кпорогу, когда программы будут не пи-саться последовательностью инструкций, авыучиваться на примерах. Выживут языки,на которых будут делать платформы обу-чения и сбора примеров. Но это длинныйгоризонт, за который заглядывать тяжело

Page 80: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

и бессмысленно.

Что думаешь о Perl 6?

Очень много всего передумал про Perl6 за эти годы. Сейчас смотрю на него слёгким светлым сожалением. Мне уже непредоставится случая использовать его впродакшене, это поезд ушёл. Но я точно бу-ду писать на Perl 6 всякую мелочь, которуюсейчас я делаю на Perl 5/Clojure. Однако, японимаю, что без большого продакшена уPerl 6 не вырастет свой CPAN, без которогоневозможно за полчаса накидать очеред-ную домашнюю мелочь, какую-нибудьбэкапилку или веб-скрейпер.

Как проект Perl 6, конечно, абсолютнопровалился. Интересно будет лет через 15прочитать книжку о том, как так вышло, даведь никто её не напишет. Надо Дэмиану

Page 81: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

под это дело Кикстартер завести.

Расскажи про первые годы Moscow.pm,первые воркшопы и конференции в СНГ.Есть ли будущее у специализированныхконференций типа YAPC?

Я начал участвовать в оффлайновой пер-ловой движухе после поездки в 2007 годуна свой первый европейский YAPC в Вене.Ну как начал — просто помогал АндреюШитову, который загорелся этим тогда жеи начал активно воплощать идеи в дей-ствительность. Moscow.pm к тому временисуществовала, но без регулярных меропри-ятий. Что было дальше, хорошо описаноздесь: http://yapcrussia.org/. Я играл тутнебольшую роль, помогал в разных местах,например с блиц-докладами. Как участники докладчик я получал регулярной притокзнакомств, мотивирующих идей и поводов

Page 82: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

сгонять в прекрасный Киев или даже в Ев-ропу. Кажется, что участие несколько разпомогало мне решать кадровые проблемына работе.

Есть ли будущее у YAPC — безусловно.Даже по инерции эта тусовка будет продол-жать собираться, а ведь там ещё и каждыйгод сколько всего нового появляется. Ин-тересное слово «специализированных».Да, тематические конференции никуда неденутся, даже наоборот, будут появлятьсяещё более узкие тематики. См. MojoConf,DancerConf. Объём знаний постоянно рас-тёт, а люди же не умнеют, поэтому имприходится суживаться.

Как учиться продвинутым програм-мистам, у которых новые проекты непоявляются даже каждый год?

Page 83: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

На Курсере. Я попытался чуточку соптими-зировать свой прошлый опыт с Курсерой —взял курс с очень интересной и новой дляменя тематикой (Биоинформатика) и началделать все задания на новом, хоть и знако-мом мне языке (Clojure). Получилось тяже-ло, часов по 10-15 в неделю, но очень хоро-шо. Два зайца убиты точно, а может и боль-ше.

Например, сейчас абсолютно всем про-граммистам необходимо заниматьсямашинным обучением. Курсов полно,а язык можно использовать любой, так чторекомендую взять не Перл. Пойдёт тяжело,со скрипом, но разгонитесь, после Перламозги быстрые и ловкие.

Если программирование это по боль-шей части ремесло, почему возникаютвопросы этики и свободы программ?

Page 84: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Профессионально ли отказываться от«неэтичных» проектов?

Я не вижу никакой зависимости междусвободой отказаться от плохого, неэтично-го проекта и степенью «ремесленности»профессии. Это вопрос общей этики любойдеятельности. Помогать программироватьцензуру в Роскомнадзоре также плохо,как придумывать про неё законы. И такженеобходимо, если нет другого способасохранить населению России доступ кмировому Интернету.

Судя по planetperl.ru, на русском о Perl пи-шут довольно мало. С чем это связано?

Я довольно неактивно слежу за новыми ис-точниками, planetperl последние пару летпополняется только читательскими усили-ями, вполне возможно, что многое не охва-

Page 85: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

чено. Но вообще популярность Перла срединовичков очевидно падает, и пишут о нёмдействительно всё меньше.

Победит(л) ли open source?

Так себе вопрос :) Open source как модельразработки ПО занял важное место в рядудругих моделей. Станет ли весь софт откры-тым? Нет, безусловно не станет до тех пор,пока человечество не перейдёт к фазе все-общего обязательного благосостояния.

Где сейчас работаешь? Сколько временипроводишь за написанием Perl-кода?

Я работаю в Яндексе техническим менедже-ром инфраструктуры Яндекс.Почты. В про-дакшене Яндекса ровно 0 строк моего кода.Гордиться тут нечем, но вот такой факт.

Page 86: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Стоит ли советовать молодым програм-мистам учить сейчас Perl?

Да, стоит, но в ряду других необязательныхязыков. Люди разные, и мы точно по себе,по нашей тусовке знаем, что встречаютсялюди с головой, повёрнутой таким особен-ным образом, что им очень нравится Перл.Будет плохо, если молодой программист сименно такой головой не попробует этотязык, а будет мучаться с Питоном, Явойили C++.

Вопросы от читателей

Что лучше: быть программистом или ме-неджером?

Менеджером быть полезнее, а программи-стом легче. Что из этого лучше? Убеждён,что каждому следует попробовать обе

Page 87: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

ипостаси и принять решение на основесобственного опыта. Есть примеры отлич-ных программистов-интравертов, которыевнезапно обнаружили в себе талант управ-ления людьми и стали гораздо счастливее.Обратных примеров не знаю.

Похож ли турецкий на Perl?

О, предвкушал такой вопрос. Турецкийязык — моё хобби. Сложный, богатыйязык, совершенно инопланетянский, оченьдалёкий от всех индоевропейских языков.Шутка ли, рядом с турецким английский,испанский, русский, персидский и хинди— братья одной семьи.

Синтаксис постфиксный, зависимые словавсегда перед главным. Поэтому в предложе-нии сказуемое всегда в самом конце, передточкой. Благодаря такому синтаксису язык

Page 88: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

скорее похож на Лисп (префиксные и пост-фиксные языки друг к другу гораздо бли-же, чем к инфиксным).

В турецком огромная, ветвистая системапричастий/деепричастий и разных другихглагольных форм, многим из которых нетаналогов в русском. Причастия исполь-зуются там, где в русском и английскомпринято вводить вспомогательные пред-ложения. Фраза типа: «человек, которыйстоял под деревом, когда я пробегал мимо,так как спешил на работу» на турецкомбудет состоять из нанизанных друг надруга отглагольных имён (что-то типа:«на работу моей спешки из-за, моегомимо пробегания во время, под деревомстоящий человек»). А это очень похожена анонимную функцию, которая пере-даётся параметром в другую анонимнуюфункцию, а результат, тоже являющийся

Page 89: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

анонимной функцией, вызывается ещёраз.

Сближает с Перлом обилие синонимов.Наверное основной источник богатстватурецкого языка — зоопарк разных слов,обозначающих примерно одно и то же.Этому есть интересные историческиепричины, например, Османская импе-рия в бытность халифатом впитала дваогромных словаря мусульманского мира —персидский и арабский. Позже, налаживаяконтакты с Европой, турки подружилисьс французами, и словарь западной ци-вилизации восприняли на французском.И наконец уже националисты Турецкойреспублики, начиная с Ататюрка, в борьбеза чистоту языка многим заимствованнымсловам изобрели и изобретают аналогина основе древнетюркских корней. Ну воткак в России аэроплан называют самолё-

Page 90: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

том, так и в Турции компьютер называют«знаниесчётчиком».

В результате, для турецкого очень верноTIMTOWTDI — можно выбрать набор под-ходящих синонимов для любого слова иполучить либо очень официальный стиль,либо совсем разговорный, либо вычурноакадемический, либо произвольную дикуюкомбинацию. Красота.

MovableType еще можно пользоваться?

Можно, но в этом есть смысл только еслиуже имеется старый блог, а конвертацию ба-зы делать неохота. Для новых сайтов MT ябы не рекомендовал. Там очередная итера-ция закрывания лицензий сейчас происхо-дит, а собрать небольшую блогосистему изкирпичей с CPAN-а сейчас проще просто-го. Было бы кстати интересно сделать с ну-

Page 91: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

ля отображение блога напрямую из базы вформате MT.

Больше нравится вести свои открытыепроекты или контрибьютить?

Второе. Руководство и управление, слеже-ние и контроль — это тяжёлые занятия, яих могу делать, и даже хорошо, но толькоза зарплату или ради очень светлой цели.Помочь, подтолкнуть что-то внешнее, нооткрытое и полезное в роли программистаили аналитика мне проще.

Вопросы из Фейсбука

Кроме Perl, какой современный язык (илитехнология) наиболее достоин примене-ния в онлайн-проектах?

Мне не нравится выбор глагола «достоин».

Page 92: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Сейчас программы для интернета лучшеписать на JavaScript, если уж идёт речьо рекомендациях. Стратегически такойвыбор обеспечивает хороший приток кад-ров, приемлемую производительность (итруда, и вычислений), гарантию поддерж-ки. Однако, если у вас есть талантливыйразработчик на другом языке или вам надочто-то необычное, то выбирайте с ним дру-гие технологии. То есть про JavaScript — этослабая рекомендация, легко перебиваемаясильными критериями. Начинать сейчасбольшой проект на будущее на Перле вотсутствие хотя бы заготовки команды —это приключение. Но нет ничего плохого втом, чтобы хотеть приключений.

А что из мира Perl за последние пару летбольше всего удивило/порадовало?

Порадовало — недавнее объявление Ларри

Page 93: Pragmatic 31 Perlpragmaticperl.com/issues/31/pragmaticperl-31-ebook.pdf · с Perl 1, про существование Фонда под-держки ядра Perl 5, и про то,

Уолла о выпуске Перл 6 к грядущему Рожде-ству. Удивляло и удивляет — популярностьDancer; объявление о том, что бешеныеяпонцы-организаторы YAPC::Asia пере-стают её делать; как некрасиво сломалиsmartmatch и given в 5.18.

■ Вячеслав Тихановский