Выпуск 20. Октябрь 2014

Обзор CPAN за сентябрь 2014 г. | Содержание

Интервью с Леоном Тиммермансом

Леон Тиммерманс (Leon Timmermans) — Perl-программист, биолог по образованию, автор и сопровождающий многих популярных модулей на CPAN.

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

Вообще-то первым языком, который я по-настоящему выучил, был Javascript, причем еще тогда, когда никто его толком не использовал ни для чего серьезного (мне кажется, в районе 1999 года). По иронии судьбы, его сейчас используют все, а я не прикасался к нему в течение многих лет. После этого я познакомился с C, Java и Perl, хотя я уже не помню, в каком это было порядке (это была непрерывная последовательность).

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

Vim. Я начал им пользовался когда начал использовать Linux и никогда не пробовал использовать что либо другой (я даже использовал его на Windows).

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

Думаю, что где-то в 2000-2001 году я наткнулся на Perl-книгу и начал играться с языком на своей Linux-машине (там был установлен 5.005004). Только в 2008 году я начал загружать свои модули на CPAN и через несколько месяцев позже посетил свой первый Perl-воркшоп. Так я и попал в сети Perl-сообщества.

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

Мне очень нравится С++, особенно когда вышел С++11 (и этим летом С++14). Он во многом похож на perl, у него такая репутация устаревшего языка, но если присмотреться, он живой и в активной разработке. И точно также как Perl, этот язык относится к тебе как к взрослому: он не говорит, как что-нибудь сделать, но предоставляет богатый инструментарий для достижения своей цели. Не поймите меня неправильно, C++ капризный, и каждый опытный C++ программист испытывает разного рода раздражение по отношению к нему (большее, чем к другим языкам), но как по мне, он вполне хорош.

Моим другим основным языком является C. Сегодня в большинстве случаев я использую его для работы над ядром perl и XS-модулями. Мне он все также нравится как и раньше, но С++ позволяет мне решать проблемы более эффективным способом.

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

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

Что, по-твоему, является наиболее важной особенностью языков будущего?

В длительной перспективе — расширяемость. Возможность реализации вне ядра вещей, которые авторы не предусмотрели.

В короткой перспективе — хорошая поддержка распараллеливания. Мы живем в многоядерном мире, но только некоторые программы пользуются этим, потому как большинство языков программирования не позволяют этого сделать. Есть незаполненная ниша.

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

Я заметил, что включение экспериментального функционала выглядит несколько странным. И я думаю, что включение их по умолчанию с выводом предупреждения было бы более правильным подходом, чем добавлении двух строчек, чтобы сказать perl о том, что ты знаешь, что делаешь (это не perl-подход). Поэтому мне пришла в голову идея написать модуль, который бы говорил, что ты делаешь что-то рискованное, без попытки помешать тебе в этом.

Как объединяешь биологию и программирование?

У меня вообще биологическое образование, а не программисткое. Во время моего исследования я решил смешать мое хобби и работу.

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

Что не так с File::Slurp?

Есть три проблемы.

Первая — это интерфейс. В современной работе с файловой системой кодировка файла важна настолько же, насколько и его имя. Это было инновацией perl 5.8, но File::Slurp был написан до этой версии. Откровенно говоря, вся парадигма сильно устарела. read_file($filename, binmode => ":encoding(utf-8)") слишком длинно, что приводит к тому, что кодировку все игнорируют. В File::Slurper это выглядит как read_text($filename), что, по-моему, выглядит несколько лучше.

Во-вторых, реализация содержит ошибки. Так как модуль был написан до IO layers и пытается их переизобрести, и не очень успешно. В частности, он некорректно декодирует/кодирует не-utf-8 символы (как, например, UTF-16 и KOI-*). Также у него есть проблемы с правильной обработкой перевода строк. Все это из-за небольших оптимизаций для частных случаев (чтение бинарного файла в переменную), что сильно усложняет код. Я планирую добавить похожую, но правильную оптимизацию в ядро perl версии 5.22, чтобы закончить этот спор.

Третья проблема — это сопровождение. Дистрибутив не обновлялся в течение трех лет несмотря на ошибки, найденные более полутора лет назад. Он и до этого редко обновлялся. Я понимаю, что у всех программ есть ошибки, но я не хотел бы зависеть от авторов, которые настолько не заботятся об их исправлении.

Правильно ли использовать потоки в Perl?

Обычно нет.

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

Я работал над модулем акторов, что лучше вписывается во внутренности perl, но доведение модуля до возможности использования другими программистами довольно сложно. Существующая на сегодняшний день непонятная ситуация со smart-matching, возможно, вынудит меня вообще пересмотреть весь интерфейс.

libperl++ это законченный проект? Каков его статус?

Законченный? К сожалению, нет. Должен признать, что это несколько заброшенный проект, хотя у меня есть планы по его воскрешению.

libperl++ был очень амбициозным проектом, который научил меня C++ и Perl API. По факту, это самый сложный проект, который я когда-либо писал. Настолько сложный, что я загнал себя в угол. Объединение шаблонов, множественного наследования и неявных преобразований сделало эту смесь взрывоопасной.

Возможно, мне стоит сделать версию 2.0 с более компактным и не таким магическим кодом.

Улучшилась ли Perl-документация с 2010 года?

Местами. Не настолько, насколько мне бы хотелось. Некоторые вещи были переписаны, как например, perlopentut, многие вещи остались неизменными. На это стоит направить поток мотивированных волонтеров.

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

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

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

Будешь ли снова начинать писать блог?

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

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


Обзор CPAN за сентябрь 2014 г. | Содержание
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье