LXF90:Интервью
Human (обсуждение | вклад) |
Human (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
В толпе разработчиков Дэмьена вы узнаете сразу. Это – парень в серых брюках, черной футболке и с толпой вцепившихся в него программистов Perl. Если Ларри Уолл – Янь, то он – Инь, адвокат дьявола. Ларри и Дэмьен вместе трудились в кузнице, где был выкован Клинок Perl и где его превратили в Perl 6; от него зависит будущее всей компьютерной братии. Грэм Моррисон получил задание встретиться с Дэмьеном и уточнить, что происходит с Perl 6. | В толпе разработчиков Дэмьена вы узнаете сразу. Это – парень в серых брюках, черной футболке и с толпой вцепившихся в него программистов Perl. Если Ларри Уолл – Янь, то он – Инь, адвокат дьявола. Ларри и Дэмьен вместе трудились в кузнице, где был выкован Клинок Perl и где его превратили в Perl 6; от него зависит будущее всей компьютерной братии. Грэм Моррисон получил задание встретиться с Дэмьеном и уточнить, что происходит с Perl 6. | ||
− | + | Linux Format: '''На что сейчас в основном уходит ваше время?''' | |
− | + | Дэмьен Конвей: Примерно 50% занято банальным зарабатыванием на жизнь. То есть я готовлю занятия и презентации, а затем – путешествую по всему миру, доставляя их в нужные места. Еще 20%, наверное, уходят на поиски работы: контрактов и людей, которые хотят, чтобы я выполнил для них некое дело – то есть, логистику, необходимую, чтобы все получилось. | |
А остальное время почти полностью посвящено разработке Perl 6. На данный момент – это совместная работа с Ларри над финальными штрихами, чтобы убедиться в том, что все части осмысленны и хорошо работают вместе, и я помогаю ему сложить оставшиеся элементы головоломки. | А остальное время почти полностью посвящено разработке Perl 6. На данный момент – это совместная работа с Ларри над финальными штрихами, чтобы убедиться в том, что все части осмысленны и хорошо работают вместе, и я помогаю ему сложить оставшиеся элементы головоломки. | ||
Строка 12: | Строка 12: | ||
Довольно интересно, что эта завершающая стадия работы над Perl 6 немного сложнее, чем стадия общей разработки, потому что теперь почти все уже на своих местах, и большинством сделанного мы очень довольны, есть несколько мелочей, которые должны быть не хуже всего прочего, а у нас меньше возможностей для их разработки. Так что именно поиск нужного решения для этих последних штрихов кажется мне таким интересным, это своего рода проба сил. | Довольно интересно, что эта завершающая стадия работы над Perl 6 немного сложнее, чем стадия общей разработки, потому что теперь почти все уже на своих местах, и большинством сделанного мы очень довольны, есть несколько мелочей, которые должны быть не хуже всего прочего, а у нас меньше возможностей для их разработки. Так что именно поиск нужного решения для этих последних штрихов кажется мне таким интересным, это своего рода проба сил. | ||
− | + | LXF: '''А преимущества у такого способа работы есть?''' | |
− | + | ДК: Это своего рода вызов, но да, я думаю, преимущества есть. И преимущество состоит в том, что мы не связаны никакими условиями. Если бы мы работали в какой-то фирме, у нее были бы свои цели, связанные с Perl 6, и нам, как сотрудникам фирмы, пришлось бы в первую очередь заботиться об этих целях. А мы работаем на сообщество, и можем сконцентрироваться на целях Perl 6, важных для сообщества, и эти цели куда более многообразны, чем могли бы быть цели любой, самой крупной фирмы. | |
− | Люди говорят: «Мы разрабатывали Perl 6 шесть лет. Почему же он еще не появился?» А я думаю, что фактически, это преимущество – у нас было время разработать то, что будет самым лучшим на следующие 20 лет. Конечно, с точки зрения PR это не слишком хорошо, но с точки зрения языка, который мы создаем (на самом деле, уже создали), это настолько хорошо, что лучше и сделать нельзя. Подумайте, какого калибра люди участвуют в проекте; сразу станет понятно, что все это – | + | Люди говорят: «Мы разрабатывали Perl 6 шесть лет. Почему же он еще не появился?» А я думаю, что фактически, это преимущество – у нас было время разработать то, что будет самым лучшим на следующие 20 лет. Конечно, с точки зрения PR это не слишком хорошо, но с точки зрения языка, который мы создаем (на самом деле, уже создали), это настолько хорошо, что лучше и сделать нельзя. Подумайте, какого калибра люди участвуют в проекте; сразу станет понятно, что все это – просто здорово. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Есть фраза, которую я повторяю чаще всех остальных: «Вот как это в Perl 6». Я вижу, какое волнение написано на лицах людей, если они в течение получаса видят то, что мы внесли в язык, честно, я вижу на их лицах вожделение: «Почему его еще нет? Почему нельзя пойти домой и приняться за него прямо сейчас?» ...По-моему, самое прекрасное, что произошло за два года с нашей прошлой беседы [Интервью, LXF62] – это что у нас был проект Pugs с Одри Танг [Audrey Tang], которая проложила нам дорогу, и сейчас вы можете пойти и сделать это [использовать Perl 6]. | Есть фраза, которую я повторяю чаще всех остальных: «Вот как это в Perl 6». Я вижу, какое волнение написано на лицах людей, если они в течение получаса видят то, что мы внесли в язык, честно, я вижу на их лицах вожделение: «Почему его еще нет? Почему нельзя пойти домой и приняться за него прямо сейчас?» ...По-моему, самое прекрасное, что произошло за два года с нашей прошлой беседы [Интервью, LXF62] – это что у нас был проект Pugs с Одри Танг [Audrey Tang], которая проложила нам дорогу, и сейчас вы можете пойти и сделать это [использовать Perl 6]. | ||
Строка 45: | Строка 24: | ||
Но в общем и целом меня крайне радует достигнутое, и меня крайне радует, что у нас было достаточно времени сделать работу хорошо. И во многом из-за того, что на нас не давил корпоративный график работ. | Но в общем и целом меня крайне радует достигнутое, и меня крайне радует, что у нас было достаточно времени сделать работу хорошо. И во многом из-за того, что на нас не давил корпоративный график работ. | ||
− | + | LXF: '''Повлияло ли на процесс разработки за последние шесть лет появление PHP или Ruby?''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ДК: Я не совсем уверен, что эти два оказали какое-то влияние именно в пределах указанного интервала. Конечно, Ruby сильно повлиял на Perl 6; я бы ничего не стал убирать из того, что Мац [Юкихиро Мацумото, Yukihiro Matsumoto, автор Ruby] сотворил с Ruby. Многое из того, что он позаимствовал в Perl и запихнул в Ruby, снова вернулось в Perl. И я уверен, что если бы не было Ruby, Perl не смог бы стать настолько объектно-ориентированным, как Perl 6. | |
Если быть предельно честным, то большинство языков, появившихся в течение упомянутого периода, не особо отличались от ранее существовавших. Я думаю, что наше мышление изменилось из-за усиления некоторых парадигм и некого понимания, пришедшего к нам в процессе программирования – что работает, а что не работает. По примеру на то и на другое: за этот период вроде как расцвело аспектно-ориентированное программирование. Люди осознали, что хотя объектно-ориентированному программированию есть что предложить, язык не может быть полным, если в нем нет механизма, ортогонального к структуре классов, который позволял бы добавлять необходимые функции, но не принадлежал к иерархии. И что здорово – мы смогли взять это и внедрить. Мы сказали: «Ладно, Perl нужна поддержка аспектно-ориентированного программирования, поэтому встроим такой механизм прямо в ядро языка...» | Если быть предельно честным, то большинство языков, появившихся в течение упомянутого периода, не особо отличались от ранее существовавших. Я думаю, что наше мышление изменилось из-за усиления некоторых парадигм и некого понимания, пришедшего к нам в процессе программирования – что работает, а что не работает. По примеру на то и на другое: за этот период вроде как расцвело аспектно-ориентированное программирование. Люди осознали, что хотя объектно-ориентированному программированию есть что предложить, язык не может быть полным, если в нем нет механизма, ортогонального к структуре классов, который позволял бы добавлять необходимые функции, но не принадлежал к иерархии. И что здорово – мы смогли взять это и внедрить. Мы сказали: «Ладно, Perl нужна поддержка аспектно-ориентированного программирования, поэтому встроим такой механизм прямо в ядро языка...» | ||
− | + | LXF: '''Так вот куда попадает Pugs?''' | |
− | + | ДК: Не думаю. Я думаю, что сюда попадает компонент под названием PGE, это грамматический движок. И он действительно хорошо подходит, потому что мы разработали грамматику Perl 6 таким образом, что вы получаете всю мощность синтаксического анализа самой лучшей породы, какую только можно найти. Раньше все грамматические конструкции, такие как Lex и Yacc на раннем этапе или более современные вещи, вроде Antlr – они всегда были отделены от языка. Они всегда были инструментом, который применялся в языке, или применялся для создания языка. | |
Мы знали, что у Perl лучшие регулярные выражения на свете, но до следующего уровня он не поднимался: до грамматического уровня, на котором можно, используя все это, легко создать интерпретаторы языков. Вот мы и внесли это в язык. | Мы знали, что у Perl лучшие регулярные выражения на свете, но до следующего уровня он не поднимался: до грамматического уровня, на котором можно, используя все это, легко создать интерпретаторы языков. Вот мы и внесли это в язык. | ||
Строка 125: | Строка 40: | ||
Наши мысли о разработке языка во многом получали информацию от этого. Язык должен быть легок для тестирования, для синтаксического анализа, для рефакторинга. Да, тестировать программы нужно; но не просто проверять правильность функционирования, а убеждаться, что тест охватывает все возможности. Поэтому нужен язык, в котором было бы видно внутреннее представление всех ветвей в программе, а для этого нужно, чтобы внутреннее представление программы было в самой программе. | Наши мысли о разработке языка во многом получали информацию от этого. Язык должен быть легок для тестирования, для синтаксического анализа, для рефакторинга. Да, тестировать программы нужно; но не просто проверять правильность функционирования, а убеждаться, что тест охватывает все возможности. Поэтому нужен язык, в котором было бы видно внутреннее представление всех ветвей в программе, а для этого нужно, чтобы внутреннее представление программы было в самой программе. | ||
− | + | LXF: '''Как вы узнаете, что пора ставить точку?''' | |
− | + | ДК: Какой чудесный, чудесный вопрос. [Долгая пауза] Знаете, меня никогда об этом не спрашивали, а это ключевой вопрос. Как узнать, что всего уже достаточно, чтобы не переборщить? | |
Все эти годы мы придерживались принципа: никогда не включать функций, которые служили бы только для одной цели. Если нечто претендовало на включение в Perl, значит, должно было годиться для решения пары задач. Оно должно было улучшать то, что уже было в языке, плюс обеспечивать дополнительную функциональность, то есть давать еще и чистую прибыль. Потому что нужно было считаться с той самой проблемой, о которой вы сказали, а именно: «Уймись, не то язык чересчур разбухнет». | Все эти годы мы придерживались принципа: никогда не включать функций, которые служили бы только для одной цели. Если нечто претендовало на включение в Perl, значит, должно было годиться для решения пары задач. Оно должно было улучшать то, что уже было в языке, плюс обеспечивать дополнительную функциональность, то есть давать еще и чистую прибыль. Потому что нужно было считаться с той самой проблемой, о которой вы сказали, а именно: «Уймись, не то язык чересчур разбухнет». | ||
Строка 135: | Строка 50: | ||
Вот вам ответ: мы останавливаемся, когда появляется ощущение, что все срослось и мы сделали все, что хотели сделать. Естественно, мы не касались новшеств, появившихся месяца три назад, но зато мы сделали другое – по нашему мнению, мы создали новую версию Perl настолько расширяемой, что новшества, которые появляются сейчас, или появятся через два года, через пять лет, очень легко будут интегрированы в Perl 6, так что, возможно, Perl 7 уже не понадобится. | Вот вам ответ: мы останавливаемся, когда появляется ощущение, что все срослось и мы сделали все, что хотели сделать. Естественно, мы не касались новшеств, появившихся месяца три назад, но зато мы сделали другое – по нашему мнению, мы создали новую версию Perl настолько расширяемой, что новшества, которые появляются сейчас, или появятся через два года, через пять лет, очень легко будут интегрированы в Perl 6, так что, возможно, Perl 7 уже не понадобится. | ||
− | + | LXF: '''А бывают разногласия между разработчиками, о том, что важно и когда надо остановиться?''' | |
− | + | ДК: Ну что вы, у нас полное согласие всегда и во всём. [Смеется] Да нет, по-моему, вполне здоровая ситуация, когда спорят на тему «как лучше это сделать?» или «подходит это сюда или нет?». Если вы посмотрите на списки рассылки, у нас там очень много талантливых людей, они проверяют наши решения и рассматривают их под разным углом, так вот, если на эти списки взглянуть, вы увидите массу разногласий по теме, как правильно работать. | |
Так что, я думаю, разногласия – это очень ценная вещь. А в конечном итоге нам помогает тот факт, что Perl – это то, что о нем говорит Ларри. | Так что, я думаю, разногласия – это очень ценная вещь. А в конечном итоге нам помогает тот факт, что 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). И вы получаете возможность параллелизовать это, причем написать это на практически обычном английском языке. | Например, у вас есть список неприемлемых паролей, и вы можете создать одну скалярную величину, которая равна любому из них. Затем вы можете сказать: «Дайте мне ваш пароль, и если он равен этой одной скалярной величине, значит, он равен и любому [из неприемлемых паролей]». Дело в том, что благодаря такой структуре можно – по крайней мере, теоретически – параллелизовать этот тест. Тут известно, что вам надо просто проверить равенство с любой величиной, а они совершенно независимы, и если это не так – применительно к любой из них – у вас есть возможность вернуться к исходной точке кратчайшим путем. Это же столбовая дорога к параллелизации. Вы можете просто ввести в Perl: if $password eq any(@existing_passwords). И вы получаете возможность параллелизовать это, причем написать это на практически обычном английском языке. | ||
Строка 159: | Строка 74: | ||
А что до пристрастий, я люблю всякие милые мелочи. Например, то, что теперь у нас есть функция «print line» в Perl, потому что в 70% всех напечатанных выражений приходится в конце ставить новую строку. Меня это просто бесило! А теперь есть маленькая функция say – вы просто пишете say $whatever, а она сама вставляет перевод строки. Штука тривиальная, такое можно ввести в любой язык, но немного найдется языков, которые это сделали, да ещё столь изящно. | А что до пристрастий, я люблю всякие милые мелочи. Например, то, что теперь у нас есть функция «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, наверное, причина в этом. [http://www.linuxformat.ru LXF] | Сейчас Open Source становится мейнстримом, в огромной степени благодаря таким программам, как Firefox. Linux... наверное, не до такой степени, как Firefox, потому что Firefox – это интерфейс, через который обычный человек, не компьютерный эксперт, ежедневно сталкивается с разными хитрыми штуками, и все больше людей этим занимается. Я хочу сказать, заметно, что доля Linux на рынке тоже растет, но, наверно, не такими темпами. Ведь в Firefox можно работать и под Windows, наверное, причина в этом. [http://www.linuxformat.ru LXF] |
Версия 18:57, 12 марта 2008
|
|
|
За кулисами 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