Ларри Уолл: «Сегодня Perl применяется для решения ряда проблем, о которых я и не подозревал, создавая этот язык»
Ларри Уолл – человек, ненамеренно сделавший очень многое для распространения UNIX-систем. Он никогда не занимался целенаправленной рекламой UNIX, но создание языка Perl сделало его одним из самых популярных людей Open Source-движения. Сейчас уже, наверное, невозможно найти технического специалиста, работающего в UNIX и не знакомого с верблюдом, изображенным на логотипе Perl. Благодаря гибкости и переносимости Perl вышел далеко за рамки UNIX, сейчас его довольно часто можно встретить под Windows и многими другими платформами.
Несколько лет назад Perl позиционировался как лучший язык для разработки веб-приложений. Сейчас его заметно потеснил PHP. Что вы думаете об этой ситуации? Какова экологическая ниша Perl сейчас и для чего, по вашему мнению, его стоит теперь применять?
Perl и PHP – очень разные языки. Первый является языком общего назначения. В целом он предназначен для разнообразных научных применений, обработки баз данных, всевозможных манипуляций с текстом, системного администрирования, быстрой разработки прототипов интернет-сервисов. Благодаря этим качествам некоторое время по недоразумению он использовался как веб-язык. Второй же предназначен только для веб-разработки и справляется с этой задачей очень хорошо. Неудивительно, что в этой нише он доминирует, но я не думаю, что он будет работать хорошо за ее пределами. Сейчас Perl применяется для решения таких проблем, о которых я и не подозревал, создавая этот язык. К примеру, он с успехом применяется в генетических исследованиях, ведь ДНК принято обозначать как набор символов, а в удобстве работы с символами Perl нет равных.
Во время разработки новой версии Perl каким качествам продукта придается первостепенное значение? Оптимизации, гибкости и красоте кода или наличию наибольшего количества полезных функций?
Я думаю, всем вышеперечисленным. За последние пять лет мы увидели, что людям может пригодиться самый необычный и фантастический функционал, о котором только можно подумать. Поэтому мы стараемся сделать так, чтобы язык позволял делать многие вещи прозрачнее и проще, чем раньше, но в то же время не ограничивать пользователя, давая возможность реализовывать сложные вещи. В новой версии разработчик получит еще больше могущества и сможет работать гораздо эффективнее. Представьте себе, что нам нужно построчно сложить значения, хранящиеся в двух массивах, и поместить результат в третий. Традиционно для решения этой задачи нужно было бы использовать цикл с операциями сложения и присваивания, но в новой версии все это можно будет сделать всего лишь одним оператором.
Будет ли шестая версия языка при всех своих улучшениях работать быстрее, чем пятая?
Я думаю, да. В новой версии после компиляции текста в байт-код добавляется больше служебных сведений о типах используемых данных, ходе выполнения кода, это помогает оптимизировать выполнение программы. В то же время стоит отметить, что и код самого компилятора Perl претерпел значительные изменения в лучшую сторону. Обычно для каждого запускаемого скрипта производилась компиляция в байт-код, соответственно, если у нас выполнялись три экземпляра одного и того же скрипта, компиляция выполнялась трижды. В новой версии будет реализовано понятие разделяемой памяти и кэша байт-кода. Это значит, что скрипт будет компилироваться только первый раз и при запуске новых экземпляров этого скрипта скомпилированный код будет браться прямо из кэша Parrot.
Хотелось бы узнать приблизительные сроки выхода Perl 6.
Сказать точно, когда это произойдет, я не могу, делать одновременно множество вещей, к сожалению, невозможно. Как любой Open Source-проект, мы располагаем ограниченными средствами, соответственно не можем себе позволить нанимать дополнительных работников, приходится выбирать между скоростью разработки и качеством кода. Мы думаем, что лучше выпустить чуть позже очень устойчивую альфа-версию, чем быстро сделать несколько промежуточных неотшлифованных релизов.
Планируется ли в новой версии внести изменения в синтаксис языка, чтобы сделать его более дружественным к пользователю?
Этим вопросом будут заниматься другие разработчики, единственная задача, которую я зарезервировал для себя, – транслятор Perl 5 в Perl 6. Мне как лингвисту было бы очень интересно этим заняться, но, к сожалению, переработка глубинных компонентов языка отнимает довольно много времени. Perl уже давно перерос размеры проекта, который можно обслуживать в одиночку, поэтому многие задачи делегируются специалистам в этой области, которые сделают работу лучше.
Для представления строковых данных Perl использует кодировку Unicode, и этим выгодно отличается от других языков. Так было задумано изначально или пришло само собой, когда разработчики столкнулись с проблемами локализации?
В момент появления Perl такого понятия, как Unicode, не существовало. Мы, как и многие другие проекты, прошли через все стадии проблем с локализацией. Хранение строковых данных в Unicode появилось в версии 5.6 и работало не очень хорошо. К версии 5.8 к проекту присоединились люди, которые наконец-то довели все это до ума.
На сайте Slashdot.org несколько лет назад появилась шутка о том, что скоро должен появиться новый язык Parrot, который должен будет вобрать в себя лучшее из Perl и Python. Через какое-то время была разработана виртуальная машина Parrot, используемая для выполнения компилированного байт-кода Perl 6. Как вы думаете, сможет ли Parrot когда-нибудь компилировать и выполнять код, написанный на Python?
Perl является самым распространенным из скриптовых языков, сообщество людей, использующих его, огромно. Я считаю, что мы должны стараться устанавливать добрососедские отношения, всесторонне сотрудничать и поддерживать сообщества разработчиков других скриптовых языков. Поэтому я всегда стремился к разработке какой-то единой платформы, которая сможет запускать не только Perl и Python.
В свою очередь сообщество разработчиков Perl 6 решило, что неплохо было бы поддерживать этой платформой и другие языки, такие как Ruby, Basic, Lisp, Lua. Когда работы над Perl 6 будут окончены, я думаю, мы сможем работать в его рамках c любым языком, использующим динамическую типизацию данных. На самом деле Perl старается быть как можно более дружественным к другим языкам. Когда пользователи захотели получить возможность выполнять C-код из программ на Perl, пришлось много потрудиться, чтобы реализовать такой функционал, но я думаю, что труды были ненапрасны, потому что это позволит значительно улучшить кодовую базу многих проектов.
Бытует мнение, что виртуальная машина Parrot по своему дизайну очень похожа на среду выполнения Microsoft .Net. Не могли бы вы прокомментировать это утверждение?
Я думаю что .Net по особенностям реализации больше похож на Microsoft Java Virtual Machine со свойственной ему статической типизацией данных. В дизайн Parrot изначально заложена способность работать в двух режимах с динамическими типами данных и со статическими. Соответственно, пользователь сможет самостоятельно добавлять данные о типе переменных, используемых в программе, и это позволит управлять тем, как будет выглядеть поведение языка.
|
Ларри Уолл и редактор журнала Валентин Синицын |
Что вы думаете о применении embedded Perl в качестве встроенного языка для скриптования компонентов приложения?
В данной области Perl 5 успешно применяется уже довольно долго. В моей практике был случай, когда один из заказчиков для своей бухгалтерской программы попросил меня помочь реализовать сложные поля редактирования. Программа должна была понимать и уметь вычислять выражения вроде: ((8 + 7) * 12 - (10 * 44/11) ) %10. Через пару дней все было готово, ведущий разработчик был просто в восторге от того, что в выражениях можно использовать не только стандартные арифметические операции, но и расчет процентов. Оказалось, что встроить виртуальную машину интерпретатора Perl в приложение было легче, чем реализовать тот же самый функционал на языке C++. На быстродействие получившегося продукта такой симбиоз практически не повлиял, а вот время работы над приложением существенно уменьшилось. Конечно, для сообщества разработчиков дальнейшее совершенствование Perl в качестве встраиваемого языка не является высшим приоритетом, но мы все же стараемся сделать так, чтобы он мог применяться в максимально возможном количестве областей.
Расскажите, в какой компании вы сейчас работаете и, если не секрет, чем занимаетесь?
Большую часть времени в течение поседних четырех лет я официально ни у кого не работаю. В основном средства к существованию получаю за счет выполнения грантов от Perl Foundation, разрабатывая новые и улучшая существующие подсистемы Perl 6. Плюс к этому регулярно поступают авторские отчисления от публикации книг о Perl. В общем, можно сказать, что я не бедствую и довольно легко могу позволить себе путешествовать по всему миру.
Андрей Бешков
Фото автора