Выпуск 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. Есть три условия, которые я выдвигаю редактору:
- Он работает в терминале.
- Его можно расширять.
- Он хорошо работает с японским.
Когда я пытался найти подходящий редактор, были только 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 обладает следующими преимуществами:
- Можно установить с CPAN.
- Можно использовать на любой ОС.
- Обладает большой скоростью.
Складывается впечатление, что ты придерживаешься подхода, когда используется как можно меньше зависимостей. Почему это важно?
Мне не нравится скрипты, которые медленно стартуют. Если брать в общем, то чем меньше зависимостей, тем скорость запуска скрипта увеличивается. Поэтому мне кажется, что это правильное направление.
Есть также и другой ответ.
Программное обеспечение это как мультипликация. Вся программа превратится в мусор, если один из ее компонентов станет мусором. Чем меньше зависимостей, тем меньше вероятность, что поддержка приложения усложнится в будущем.
Почему написал 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 прежде чем писать новый модуль. Глупо переписывать что-либо. Однако, я уже несколько раз загружал модули с пересекающимся функционалом. Это потому, что оригинальные модули не удовлетворяли мои нужды.
Обычно я загружаю альтернативную реализацию по следующим причинам:
- Качество довольно низкое.
- Слишком много зависимостей.
- Мне не нравится дизайн.
Почему начал писать tora
и почему бросил?
Я хотел написать новый современный язык программирования, очень похожий на Perl 5.
tora
это язык обладающий следующими свойствами:
- В отличие от Perl, есть сигнатуры функций.
- Все — объект.
- Видимость имен, аналогичная Perl 5.
Разработка TORA была прервана из-за нескольких причин, таких как Amon2 и других. У меня были другие интересные проекты. Более того, мне нужно было больше времени для изучения Perl 6, и я разрабатывал SEIS и PVIP как побочные вещи.
В прошлом месяце я возобновил разработку TORA и надеюсь поработать над ним следущей весной.
← Обзор CPAN за декабрь 2013 г. | Содержание | Perl Golf →