Журнал LinuxFormat - перейти на главную

LXF90:Интервью

Материал из Linuxformat
Перейти к: навигация, поиск

За кулисами Perl 6

Perl – один из самых популярных существующих языков программирования. Одна из причин этой популярности – продуктивные отношения между создателем языка Ларри Уоллом [Larry Wall] и его главным сообщником Дэмьеном Конвеем [Damian Conway].

В толпе разработчиков Дэмьена вы узнаете сразу. Это – парень в серых брюках, черной футболке и с толпой вцепившихся в него программистов Perl. Если Ларри Уолл – Янь, то он – Инь, адвокат дьявола. Ларри и Дэмьен вместе трудились в кузнице, где был выкован Клинок Perl и где его превратили в Perl 6; от него зависит будущее всей компьютерной братии. Грэм Моррисон получил задание встретиться с Дэмьеном и уточнить, что происходит с Perl 6.

Linux Format :На что сейчас в основном уходит ваше время?

Дэмьен Конвей :Примерно 50% занято банальным зарабатыванием на жизнь. То есть я готовлю занятия и презентации, а затем – путешествую по всему миру, доставляя их в нужные места. Еще 20%, наверное, уходят на поиски работы: контрактов и людей, которые хотят, чтобы я выполнил для них некое дело – то есть, логистику, необходимую, чтобы все получилось.

А остальное время почти полностью посвящено разработке Perl 6. На данный момент – это совместная работа с Ларри над финальными штрихами, чтобы убедиться в том, что все части осмысленны и хорошо работают вместе, и я помогаю ему сложить оставшиеся элементы головоломки.

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

LXF :А преимущества у такого способа работы есть?

ДК :Это своего рода вызов, но да, я думаю, преимущества есть. И преимущество состоит в том, что мы не связаны никакими условиями. Если бы мы работали в какой-то фирме, у нее были бы свои цели, связанные с Perl 6, и нам, как сотрудникам фирмы, пришлось бы в первую очередь заботиться об этих целях. А мы работаем на сообщество, и можем сконцентрироваться на целях Perl 6, важных для сообщества, и эти цели куда более многообразны, чем могли бы быть цели любой, самой крупной фирмы.

Люди говорят: «Мы разрабатывали Perl 6 шесть лет. Почему же он еще не появился?» А я думаю, что фактически, это преимущество – у нас было время разработать то, что будет самым лучшим на следующие 20 лет. Конечно, с точки зрения PR это не слишком хорошо, но с точки зрения языка, который мы создаем (на самом деле, уже создали), это настолько хорошо, что лучше и сделать нельзя. Подумайте, какого калибра люди участвуют в проекте; сразу станет понятно, что все это – просто здорово.

Есть фраза, которую я повторяю чаще всех остальных: «Вот как это в Perl 6». Я вижу, какое волнение написано на лицах людей, если они в течение получаса видят то, что мы внесли в язык, честно, я вижу на их лицах вожделение: «Почему его еще нет? Почему нельзя пойти домой и приняться за него прямо сейчас?» ...По-моему, самое прекрасное, что произошло за два года с нашей прошлой беседы [Интервью, LXF62] – это что у нас был проект Pugs с Одри Танг [Audrey Tang], которая проложила нам дорогу, и сейчас вы можете пойти и сделать это [использовать Perl 6].

Когда я делаю презентацию, последний мой слайд – это всегда URL кода Pugs. Люди расходятся и загружают его, и где-то через полчаса они уже могут поиграть с настоящим кодом Perl 6. Все это вызывает большой ажиотаж и энтузиазм. Да и много огорчений тоже, потому что людям нравится этим заниматься, но ведь это не готово для выпуска и не обладает той же скоростью, что Perl 5.

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

LXF :Повлияло ли на процесс разработки за последние шесть лет появление PHP или Ruby?

ДК :Я не совсем уверен, что эти два оказали какое-то влияние именно в пределах указанного интервала. Конечно, Ruby сильно повлиял на Perl 6; я бы ничего не стал убирать из того, что Мац [Юкихиро Мацумото, Yukihiro Matsumoto, автор Ruby] сотворил с Ruby. Многое из того, что он позаимствовал в Perl и запихнул в Ruby, снова вернулось в Perl. И я уверен, что если бы не было Ruby, Perl не смог бы стать настолько объектно-ориентированным, как Perl 6.

Если быть предельно честным, то большинство языков, появившихся в течение упомянутого периода, не особо отличались от ранее существовавших. Я думаю, что наше мышление изменилось из-за усиления некоторых парадигм и некого понимания, пришедшего к нам в процессе программирования – что работает, а что не работает. По примеру на то и на другое: за этот период вроде как расцвело аспектно-ориентированное программирование. Люди осознали, что хотя объектно-ориентированному программированию есть что предложить, язык не может быть полным, если в нем нет механизма, ортогонального к структуре классов, который позволял бы добавлять необходимые функции, но не принадлежал к иерархии. И что здорово – мы смогли взять это и внедрить. Мы сказали: «Ладно, Perl нужна поддержка аспектно-ориентированного программирования, поэтому встроим такой механизм прямо в ядро языка...»

LXF :Так вот куда попадает Pugs?

ДК :Не думаю. Я думаю, что сюда попадает компонент под названием PGE, это грамматический движок. И он действительно хорошо подходит, потому что мы разработали грамматику Perl 6 таким образом, что вы получаете всю мощность синтаксического анализа самой лучшей породы, какую только можно найти. Раньше все грамматические конструкции, такие как Lex и Yacc на раннем этапе или более современные вещи, вроде Antlr – они всегда были отделены от языка. Они всегда были инструментом, который применялся в языке, или применялся для создания языка.

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

Такая вещь – рост нашего понимания того, что нужно для хорошей разработки и развитие различных парадигм языковых функций (хотя большинство из них имеются в большинстве натуральных языков мира) – позволяет нам, на основании этой половины десятилетия, заявить: «Мы считаем, что это будет хорошо, и это будут важно и через 20 лет, поэтому Perl 6 мало того, что сможет просто выполнять все эти вещи – он должен их поддерживать».

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

LXF :Как вы узнаете, что пора ставить точку?

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

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

Но по большому счету, вы правы: есть этот неиссякаемый фонтан новых технологий в мире программирования, как в сфере теории, так и в сфере практических технологий разработки. Так как же решить, что пора остановиться? Если честно, я думаю, ответ такой: когда устанешь! Нет, я думаю, когда достаточно глубоко изучил создание языков, то тебе совершенно ясен момент, когда можно сказать: «Да, теперь все срослось, теперь это – одно непрерывное полотно». И когда это происходит, надо остановиться. Потому что если зайти слишком далеко, то начнешь включать в язык какие-то лишние штуки, которые там совершенно на данной стадии не нужны.

Вот вам ответ: мы останавливаемся, когда появляется ощущение, что все срослось и мы сделали все, что хотели сделать. Естественно, мы не касались новшеств, появившихся месяца три назад, но зато мы сделали другое – по нашему мнению, мы создали новую версию Perl настолько расширяемой, что новшества, которые появляются сейчас, или появятся через два года, через пять лет, очень легко будут интегрированы в Perl 6, так что, возможно, Perl 7 уже не понадобится.

LXF :А бывают разногласия между разработчиками, о том, что важно и когда надо остановиться?

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

Так что, я думаю, разногласия – это очень ценная вещь. А в конечном итоге нам помогает тот факт, что Perl – это то, что о нем говорит Ларри.

LXF :Это здорово.

ДК :Ну, должен быть кто-то, в кого все упирается, иначе никуда не придешь. И почему в качестве такого человека хорошо иметь Ларри – Ларри начисто лишен эго, применительно к данной разработке. Он хочет слышать достойные идеи от других, и я видел, как он целиком соглашался с предложениями людей, которые вообще впервые оказались в списке [рассылки]. Ему не важно, кто выдвинул идею, ему важно только, насколько эта идея разумна.

LXF :Вы считаете, что после Perl 6, разработка Perl станет в большей степени ориентирована на сообщество?

ДК :Думаю, это весьма вероятно. Именно это мы наблюдаем в Perl 5. В конце концов, основная разработка Perl 5 сейчас ведется людьми из Perl 5 porters. И хотя Лари по-прежнему обладает правом полного вето, он крайне редко им пользуется. И он обычно оказывает всяческую поддержку, если они хотят что-то сделать, потому что Perl 5 porters отлично знают код.

LXF :А какие части Perl 6 вы любите больше всего?

ДК :С предвзятой точки зрения, один из моих любимых разделов – это функция объединений (junctions). Потому что я часто думаю о том, что объединения – мой единственный вклад в компьютерные науки. Объединения – это такая разновидность принципа квантовой суперпозиции в Perl 6: например, бывают величины, равные 5, 6, 7 и 8 одновременно. Это необыкновенно удобно, потому что если у вас есть длинный список всяких вещей, вы можете свести их в одну величину, а затем достаточно одного теста для проверки на равенство любой из них.

Например, у вас есть список неприемлемых паролей, и вы можете создать одну скалярную величину, которая равна любому из них. Затем вы можете сказать: «Дайте мне ваш пароль, и если он равен этой одной скалярной величине, значит, он равен и любому [из неприемлемых паролей]». Дело в том, что благодаря такой структуре можно – по крайней мере, теоретически – параллелизовать этот тест. Тут известно, что вам надо просто проверить равенство с любой величиной, а они совершенно независимы, и если это не так – применительно к любой из них – у вас есть возможность вернуться к исходной точке кратчайшим путем. Это же столбовая дорога к параллелизации. Вы можете просто ввести в Perl: if $password eq any(@existing_passwords). И вы получаете возможность параллелизовать это, причем написать это на практически обычном английском языке.

Я горжусь, что эта идея принадлежит мне, и я был в восторге от того, как её приняли и усовершенствовали другие члены команды, прежде чем ввести в язык.

А что до пристрастий, я люблю всякие милые мелочи. Например, то, что теперь у нас есть функция «print line» в Perl, потому что в 70% всех напечатанных выражений приходится в конце ставить новую строку. Меня это просто бесило! А теперь есть маленькая функция say – вы просто пишете say $whatever, а она сама вставляет перевод строки. Штука тривиальная, такое можно ввести в любой язык, но немного найдется языков, которые это сделали, да ещё столь изящно.

LXF :Вы довольны, что Perl 6 усилил объектную ориентированность?

ДК :Да, думаю, было бы неправильно не признать этого. В смысле практического применения языка, факт наличия формализованной объектно-ориентированной структуры классов означает, что можно заниматься ОО-программированием; это легко делать в Java, C# и C++, а теперь не менее легко и в Perl, и так же понятно... На самом деле, мы внесли в него такое, чего нет во всех этих языках. Я думаю, это будет очень важным отличием. Видимо, я меньше думаю об этом, чем мог бы, потому что почти не занимаюсь объектно-ориентированным программированием. Но я знаю, что для тех, кто им занимается, это будет, вероятно, супер-функция в Perl 6. То, что теперь можно писать классы с должным образом объявленными компонентами атрибутов и методами, наверное, окажет самое сильное позитивное воздействие из всего, о чем мы говорили. Поэтому, конечно, меня это очень радует, но я об этом даже не думаю, потому что в Perl 6 это вообще-то фундаментально.

LXF :Как вы думаете, с какими проблемами столкнется сообщество Open Source в следующие пять лет?

ДК :[Долгая пауза] Думаю, проблема для сообщества Open Source в следующую половинку десятилетия – как конкурировать, не становясь конкурентами. Мы должны сохранить веру в то, что философская основа нашего существования, того, чем мы занимаемся, действительно правильна, правильна настолько, что мы сумеем выжить, продолжая делать то, что делаем. Нам придется решать, как стать мейнстримом и при это не угодить ни в одну из ловушек мейнстрима – и не поддаться существующей практике. Меня не удивляют фирмы, которые закрывают код, вместо того, чтоб открыться настолько, насколько возможно; по-моему, у них просто сдают нервы. Думаю, вполне понятно, что множество начинаний уже продемонстрировало: с философией Open Source, оставляя код открытым, вполне возможно жить, да ещё и получать прибыль.

Сейчас Open Source становится мейнстримом, в огромной степени благодаря таким программам, как Firefox. Linux... наверное, не до такой степени, как Firefox, потому что Firefox – это интерфейс, через который обычный человек, не компьютерный эксперт, ежедневно сталкивается с разными хитрыми штуками, и все больше людей этим занимается. Я хочу сказать, заметно, что доля Linux на рынке тоже растет, но, наверно, не такими темпами. Ведь в Firefox можно работать и под Windows, наверное, причина в этом. LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика