Выпуск 11. Январь 2014

Обзор CPAN за декабрь 2013 г. | Содержание | Perl Golf

Интервью с Tokuhiro Matsuno

Tokuhiro Matsuno — автор plenv, Amon2, Furl, Minilla и многих других популярных модулей на CPAN.

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

Мой отец дал мне первый компьютер, когда мне было десять лет. Это было в 1994 году и он назывался карманный компьютер Sharp PC (http://fr.wikipedia.org/wiki/Sharp_PC-1262). Можно было использовать 24 символа для отображения и он понимал язык BASIC. Это был для меня первый опыт программирования.

Когда я перешел в старшую школу, то начал посещать клуб по персональным компьютерам. Тогда я изучал язык HSP (известный только в Японии). Он был эволюционным продолжением BASIC. Это был язык, специально разработанный для написания игр. Однако, я так и не написал ни одной игры, я разработал библиотеку.

Когда я поступил в технический колледж, мой отец дал мне Visual Basic. И я продолжил изучать программирование. На Visual Basic можно было писать для Windows. Было очень просто писать GUI-приложения. Однако, я разработал библиотеку и так и не написал ни одного GUI-приложения.

В то время в колледже было много книг по программированию, я много почерпнул из них. Тогда я использовал Ruby и Python и думал, что Perl устарел. Это было около 2000–2005 (в 2005 году в Японии много книг было опубликовано по Ruby).

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

Теперь я пишу модули на Perl.

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

В основном я использую vim. Есть три условия, которые я выдвигаю редактору:

  1. Он работает в терминале.
  2. Его можно расширять.
  3. Он хорошо работает с японским.

Когда я пытался найти подходящий редактор, были только vim и emacs.

Но когда я использую emacs, у меня постоянно болит мизинец. Поэтому я и не использую emacs.

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

Меня взяли на работу, когда мне было двадцать лет. В компании использовали Perl, и я его начал учить. В то время я уже знал Python и Ruby. Тогда я думал: «Perl очень странный язык». Однако, с течением времени, я все больше знакомился с Perl и в конце концов решил, что это неплохой язык.

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

Я использую разные языки. Для iPhone-приложений использую Objective-C. Когда нужен очень быстрый модуль, использую C или C++. В довесок к этому могу писать на Python, Ruby, PHP и т.д. Думаю, что у каждого языка есть своя область применения. Но в основном я пишу на Perl и C.

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

Perl замечательный язык.

Мне очень нравится сообщество, которое борется за обратную совместимость. Программа, написанная для Perl 5.8, работает практически без изменений и на Perl 5.18. Это удивительно. Я не хочу переписывать свои программы после каждого обновления.

В Perl 5 мне нравится управление памятью с помощью подсчета ссылок. В языках, которые используют «алгоритм пометок», достаточно сложно добиться оптимизаций. Но было бы хорошо иметь в Perl 5 этот вид сборки мусора как опцию, по аналогии с Python.

Также мне нравится лексическая область видимости, управляемая my. Явное объявление переменной часто снижает вероятность ошибок.

Удивительна и CPAN-культура. Всегда есть документация, и большинство модулей имеют историю изменений.

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

Это сложный вопрос. У меня нет на него хорошего ответа.

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

Думаю, что разработка Perl 5 продолжится. Perl 6 наконец можно будет использовать на практике. И оба языка будут дополнять и развивать друг друга.

Откуда столько энергии для написания и поддержки такого количества CPAN-модулей?

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

Расскажи об Amon2. Чем он отличается от других Perl-фреймворков для веб?

Amon2 очень простой, надежный веб-фреймворк общего назначения.

Отличия от Mojolicious

Mojolicious неплох, и мне нравится сам подход. К сожалению, там не сохраняется обратная совместимость. В Amon2 же наоборот. Мне кажется, что ломать обратную совместимость можно только с изменением названия. Когда я решу что-либо серьезно изменить, я выпущу Amon3.

Отличия от Catalyst

Catalyst зависит от Moose, а Amon2 — нет. Это потому, что я хочу, чтобы мои приложения загружались быстро.

Отличия от Dancer

Практически нет никаких отличий между Amon2 и Dancer, включая Dancer2.

Насколько стабильны биндинги для UnQLite? Используешь ли в продакшене? Что думаешь о самой базе данных?

UnQLite очень практична. UnQLite.pm уже можно пользоваться (мне пока не довелось использовать в продакшене).

Объясню, для чего я написал эту обертку.

Мне нужно было практичное хранилище с доступом по ключам. В ядре Perl есть GDBM_File, но к сожалению он устанавливается не для всех операционных систем. Его нельзя поставить с CPAN, что делает его неудобным в использовании.

В то же время UnQLite.pm обладает следующими преимуществами:

  1. Можно установить с CPAN.
  2. Можно использовать на любой ОС.
  3. Обладает большой скоростью.

Складывается впечатление, что ты придерживаешься подхода, когда используется как можно меньше зависимостей. Почему это важно?

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

Есть также и другой ответ.

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

Почему написал Minilla?

Меня не устраивала скорость запуска dzil. Мне не нравится, когда что-то долго запускается. Я бы не написал Minilla, если бы dzil использовал Moo.

И вообще «я просто хотел это написать».

Почему стоит использовать plenv вместо perlbrew?

Miyagawa очень хорошо описал причины:

plenv целиком написан на bash (кроме perl-build, который загружает дистрибутивы perl с PAUSE и запускает patchperl), он кладет в переменную PATH небольшие скрипты, которые находят нужный perl и инсталированные программы, и запускает их.

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

plenv позволяет переключать perl тремя способами: через переменную окружения PLENV_VERSION, файлом .perl-version в текущей директории и глобальной настройкой в ~/.plenv/version.

Больше текста по ссылке (на английском): http://weblog.bulknews.net/post/58079418600/plenv-alternative-for-perlbrew.

Есть планы по развитию pvip и seis? Можешь объяснить, что это вообще такое?

PVIP это парсер для Perl 6. Он написан на C и поддерживает около 50% спецификации Perl 6. SEIS это транслятор из Perl 6 на Perl 5. В данный момент это всего лишь игрушка.

PVIP и SEIS довольно интересные проекты. Однако, мне нужно было время на другие вещи и разработка приостановилась.

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

Test::Power очень интересен.

Когда пишете подобный код на Perl:

use Test::Power;

sub foo { 4 }
expect { foo() == 3 };
expect { foo() == 4 };

То при запуске получаете:

not ok 1 - L12 : expect { foo() == 3 };
#   Failed test 'L12 : ok { foo() == 3 };'
#   at foo.pl line 12.
# foo()
#    => 4
ok 2 - L13 : expect { foo() == 4 };
1..2
# Looks like you failed 1 test of 2.

Test::Power печатает процесс выполнения. Больше не нужно вручную вставлять бесполезные конструкции типа diag().

Участвуешь в организации YAPC::Asia?

Нет, я только докладчик.

Где сейчас работаешь? Требуют ли проекты высокой скорости выполнения?

Я работаю в компании, которая разрабатывает приложения для смартфонов. Я пишу серверную часть на Perl. Некоторыми приложениями нашей компании пользуются более миллиона человек. Все это работает на Amon2.

Стоит ли сейчас советовать молодым людям изучать Perl?

Это сложный вопрос. У меня нет на него хорошего ответа.

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

Docopt вполне себе хорошая имплементация. Но почему же все в одном файле?

Потому что в версии на Python так и было. Docopt.pm был транслирован с исходника на Python. При транслировании кода, очень важно делать это построчно. Поэтому, я так и сделал. Сейчас, когда перенос кода завершен, его можно разделить. Но у меня нет мотивации это делать. Принимаю патчи :)

Ищешь ли на CPAN прежде чем писать новый модуль?

Я всегда захожу на http://search.cpan.org прежде чем писать новый модуль. Глупо переписывать что-либо. Однако, я уже несколько раз загружал модули с пересекающимся функционалом. Это потому, что оригинальные модули не удовлетворяли мои нужды.

Обычно я загружаю альтернативную реализацию по следующим причинам:

  1. Качество довольно низкое.
  2. Слишком много зависимостей.
  3. Мне не нравится дизайн.

Почему начал писать tora и почему бросил?

Я хотел написать новый современный язык программирования, очень похожий на Perl 5.

tora это язык обладающий следующими свойствами:

  1. В отличие от Perl, есть сигнатуры функций.
  2. Все — объект.
  3. Видимость имен, аналогичная Perl 5.

Разработка TORA была прервана из-за нескольких причин, таких как Amon2 и других. У меня были другие интересные проекты. Более того, мне нужно было больше времени для изучения Perl 6, и я разрабатывал SEIS и PVIP как побочные вещи.

В прошлом месяце я возобновил разработку TORA и надеюсь поработать над ним следущей весной.

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


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

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