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

LXF90:Интервью

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
Строка 4: Строка 4:
 
В толпе разработчиков Дэмьена вы узнаете сразу. Это – парень в серых брюках, черной футболке и с толпой вцепившихся в него программистов Perl. Если Ларри Уолл – Янь, то он – Инь, адвокат дьявола. Ларри и Дэмьен вместе трудились в кузнице, где был выкован Клинок Perl и где его превратили в Perl 6; от него зависит будущее всей компьютерной братии. Грэм Моррисон получил задание встретиться с Дэмьеном и уточнить, что происходит с Perl 6.
 
В толпе разработчиков Дэмьена вы узнаете сразу. Это – парень в серых брюках, черной футболке и с толпой вцепившихся в него программистов Perl. Если Ларри Уолл – Янь, то он – Инь, адвокат дьявола. Ларри и Дэмьен вместе трудились в кузнице, где был выкован Клинок Perl и где его превратили в Perl 6; от него зависит будущее всей компьютерной братии. Грэм Моррисон получил задание встретиться с Дэмьеном и уточнить, что происходит с Perl 6.
  
Linux Format: '''На что сейчас в основном уходит ваше время?'''
+
{{oncolor|white|red|Linux Format}} :'''На что сейчас в основном уходит ваше время?'''
  
Дэмьен Конвей: Примерно 50% занято банальным зарабатыванием на жизнь. То есть я готовлю занятия и презентации, а затем – путешествую по всему миру, доставляя их в нужные места. Еще 20%, наверное, уходят на поиски работы: контрактов и людей, которые хотят, чтобы я выполнил для них некое дело – то есть, логистику, необходимую, чтобы все получилось.
+
{{oncolor|white|red|Дэмьен Конвей}} :Примерно 50% занято банальным зарабатыванием на жизнь. То есть я готовлю занятия и презентации, а затем – путешествую по всему миру, доставляя их в нужные места. Еще 20%, наверное, уходят на поиски работы: контрактов и людей, которые хотят, чтобы я выполнил для них некое дело – то есть, логистику, необходимую, чтобы все получилось.
  
 
А остальное время почти полностью посвящено разработке Perl 6. На данный момент – это совместная работа с Ларри над финальными штрихами, чтобы убедиться в том, что все части осмысленны и хорошо работают вместе, и я помогаю ему сложить оставшиеся элементы головоломки.
 
А остальное время почти полностью посвящено разработке Perl 6. На данный момент – это совместная работа с Ларри над финальными штрихами, чтобы убедиться в том, что все части осмысленны и хорошо работают вместе, и я помогаю ему сложить оставшиеся элементы головоломки.
Строка 12: Строка 12:
 
Довольно интересно, что эта завершающая стадия работы над Perl 6 немного сложнее, чем стадия общей разработки, потому что теперь почти все уже на своих местах, и большинством сделанного мы очень довольны, есть несколько мелочей, которые должны быть не хуже всего прочего, а у нас меньше возможностей для их разработки. Так что именно поиск нужного решения для этих последних штрихов кажется мне таким интересным, это своего рода проба сил.
 
Довольно интересно, что эта завершающая стадия работы над Perl 6 немного сложнее, чем стадия общей разработки, потому что теперь почти все уже на своих местах, и большинством сделанного мы очень довольны, есть несколько мелочей, которые должны быть не хуже всего прочего, а у нас меньше возможностей для их разработки. Так что именно поиск нужного решения для этих последних штрихов кажется мне таким интересным, это своего рода проба сил.
  
LXF: '''А преимущества у такого способа работы есть?'''
+
{{oncolor|white|red|LXF}} :'''А преимущества у такого способа работы есть?'''
  
ДК: Это своего рода вызов, но да, я думаю, преимущества есть. И преимущество состоит в том, что мы не связаны никакими условиями. Если бы мы работали в какой-то фирме, у нее были бы свои цели, связанные с Perl 6, и нам, как сотрудникам фирмы, пришлось бы в первую очередь заботиться об этих целях. А мы работаем на сообщество, и можем сконцентрироваться на целях Perl 6, важных для сообщества, и эти цели куда более многообразны, чем могли бы быть цели любой, самой крупной фирмы.
+
{{oncolor|white|red|ДК}} :Это своего рода вызов, но да, я думаю, преимущества есть. И преимущество состоит в том, что мы не связаны никакими условиями. Если бы мы работали в какой-то фирме, у нее были бы свои цели, связанные с 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].
Строка 24: Строка 25:
 
Но в общем и целом меня крайне радует достигнутое, и меня крайне радует, что у нас было достаточно времени сделать работу хорошо. И во многом из-за того, что на нас не давил корпоративный график работ.
 
Но в общем и целом меня крайне радует достигнутое, и меня крайне радует, что у нас было достаточно времени сделать работу хорошо. И во многом из-за того, что на нас не давил корпоративный график работ.
 
                                                                                    
 
                                                                                    
LXF: '''Повлияло ли на процесс разработки за последние шесть лет появление PHP или Ruby?'''
+
{{oncolor|white|red|LXF}} :'''Повлияло ли на процесс разработки за последние шесть лет появление PHP или Ruby?'''
  
ДК: Я не совсем уверен, что эти два оказали какое-то влияние именно в пределах указанного интервала. Конечно, Ruby сильно повлиял на Perl 6; я бы ничего не стал убирать из того, что Мац [Юкихиро Мацумото, Yukihiro Matsumoto, автор Ruby] сотворил с Ruby. Многое из того, что он позаимствовал в Perl и запихнул в Ruby, снова вернулось в Perl. И я уверен, что если бы не было Ruby, Perl не смог бы стать настолько объектно-ориентированным, как Perl 6.
+
{{oncolor|white|red|ДК}} :Я не совсем уверен, что эти два оказали какое-то влияние именно в пределах указанного интервала. Конечно, Ruby сильно повлиял на Perl 6; я бы ничего не стал убирать из того, что Мац [Юкихиро Мацумото, Yukihiro Matsumoto, автор Ruby] сотворил с Ruby. Многое из того, что он позаимствовал в Perl и запихнул в Ruby, снова вернулось в Perl. И я уверен, что если бы не было Ruby, Perl не смог бы стать настолько объектно-ориентированным, как Perl 6.
  
 
Если быть предельно честным, то большинство языков, появившихся в течение упомянутого периода, не особо отличались от ранее существовавших. Я думаю, что наше мышление изменилось из-за усиления некоторых парадигм и некого понимания, пришедшего к нам в процессе программирования – что работает, а что не работает. По примеру на то и на другое: за этот период вроде как расцвело аспектно-ориентированное программирование. Люди осознали, что хотя объектно-ориентированному программированию есть что предложить, язык не может быть полным, если в нем нет механизма, ортогонального к структуре классов, который позволял бы добавлять необходимые функции, но не принадлежал к иерархии. И что здорово – мы смогли взять это и внедрить. Мы сказали: «Ладно, Perl нужна поддержка аспектно-ориентированного программирования, поэтому встроим такой механизм прямо в ядро языка...»
 
Если быть предельно честным, то большинство языков, появившихся в течение упомянутого периода, не особо отличались от ранее существовавших. Я думаю, что наше мышление изменилось из-за усиления некоторых парадигм и некого понимания, пришедшего к нам в процессе программирования – что работает, а что не работает. По примеру на то и на другое: за этот период вроде как расцвело аспектно-ориентированное программирование. Люди осознали, что хотя объектно-ориентированному программированию есть что предложить, язык не может быть полным, если в нем нет механизма, ортогонального к структуре классов, который позволял бы добавлять необходимые функции, но не принадлежал к иерархии. И что здорово – мы смогли взять это и внедрить. Мы сказали: «Ладно, Perl нужна поддержка аспектно-ориентированного программирования, поэтому встроим такой механизм прямо в ядро языка...»
  
LXF: '''Так вот куда попадает Pugs?'''
+
{{oncolor|white|red|LXF}} :'''Так вот куда попадает Pugs?'''
  
ДК: Не думаю. Я думаю, что сюда попадает компонент под названием PGE, это грамматический движок. И он действительно хорошо подходит, потому что мы разработали грамматику Perl 6 таким образом, что вы получаете всю мощность синтаксического анализа самой лучшей породы, какую только можно найти. Раньше все грамматические конструкции, такие как Lex и Yacc на раннем этапе или более современные вещи, вроде Antlr – они всегда были отделены от языка. Они всегда были инструментом, который применялся в языке, или применялся для создания языка.
+
{{oncolor|white|red|ДК}} :Не думаю. Я думаю, что сюда попадает компонент под названием PGE, это грамматический движок. И он действительно хорошо подходит, потому что мы разработали грамматику Perl 6 таким образом, что вы получаете всю мощность синтаксического анализа самой лучшей породы, какую только можно найти. Раньше все грамматические конструкции, такие как Lex и Yacc на раннем этапе или более современные вещи, вроде Antlr – они всегда были отделены от языка. Они всегда были инструментом, который применялся в языке, или применялся для создания языка.
  
 
Мы знали, что у Perl лучшие регулярные выражения на свете, но до следующего уровня он не поднимался: до грамматического уровня, на котором можно, используя все это, легко создать интерпретаторы языков. Вот мы и внесли это в язык.
 
Мы знали, что у Perl лучшие регулярные выражения на свете, но до следующего уровня он не поднимался: до грамматического уровня, на котором можно, используя все это, легко создать интерпретаторы языков. Вот мы и внесли это в язык.
Строка 40: Строка 41:
 
Наши мысли о разработке языка во многом получали информацию от этого. Язык должен быть легок для тестирования, для синтаксического анализа, для рефакторинга. Да, тестировать программы нужно; но не просто проверять правильность функционирования, а убеждаться, что тест охватывает все возможности. Поэтому нужен язык, в котором было бы видно внутреннее представление всех ветвей в программе, а для этого нужно, чтобы внутреннее представление программы было в самой программе.
 
Наши мысли о разработке языка во многом получали информацию от этого. Язык должен быть легок для тестирования, для синтаксического анализа, для рефакторинга. Да, тестировать программы нужно; но не просто проверять правильность функционирования, а убеждаться, что тест охватывает все возможности. Поэтому нужен язык, в котором было бы видно внутреннее представление всех ветвей в программе, а для этого нужно, чтобы внутреннее представление программы было в самой программе.
  
LXF: '''Как вы узнаете, что пора ставить точку?'''
+
{{oncolor|white|red|LXF}} :'''Как вы узнаете, что пора ставить точку?'''
  
ДК: Какой чудесный, чудесный вопрос. [Долгая пауза] Знаете, меня никогда об этом не спрашивали, а это ключевой вопрос. Как узнать, что всего уже достаточно, чтобы не переборщить?
+
{{oncolor|white|red|ДК}} :Какой чудесный, чудесный вопрос. [Долгая пауза] Знаете, меня никогда об этом не спрашивали, а это ключевой вопрос. Как узнать, что всего уже достаточно, чтобы не переборщить?
  
 
Все эти годы мы придерживались принципа: никогда не включать функций, которые служили бы только для одной цели. Если нечто претендовало на включение в Perl, значит, должно было годиться для решения пары задач. Оно должно было улучшать то, что уже было в языке, плюс обеспечивать дополнительную функциональность, то есть давать еще и чистую прибыль. Потому что нужно было считаться с той самой проблемой, о которой вы сказали, а именно: «Уймись, не то язык чересчур разбухнет».
 
Все эти годы мы придерживались принципа: никогда не включать функций, которые служили бы только для одной цели. Если нечто претендовало на включение в Perl, значит, должно было годиться для решения пары задач. Оно должно было улучшать то, что уже было в языке, плюс обеспечивать дополнительную функциональность, то есть давать еще и чистую прибыль. Потому что нужно было считаться с той самой проблемой, о которой вы сказали, а именно: «Уймись, не то язык чересчур разбухнет».
Строка 50: Строка 51:
 
Вот вам ответ: мы останавливаемся, когда появляется ощущение, что все срослось и мы сделали все, что хотели сделать. Естественно, мы не касались новшеств, появившихся месяца три назад, но зато мы сделали другое – по нашему мнению, мы создали новую версию Perl настолько расширяемой, что новшества, которые появляются сейчас, или появятся через два года, через пять лет, очень легко будут интегрированы в Perl 6, так что, возможно, Perl 7 уже не понадобится.
 
Вот вам ответ: мы останавливаемся, когда появляется ощущение, что все срослось и мы сделали все, что хотели сделать. Естественно, мы не касались новшеств, появившихся месяца три назад, но зато мы сделали другое – по нашему мнению, мы создали новую версию Perl настолько расширяемой, что новшества, которые появляются сейчас, или появятся через два года, через пять лет, очень легко будут интегрированы в Perl 6, так что, возможно, Perl 7 уже не понадобится.
  
LXF: '''А бывают разногласия между разработчиками, о том, что важно и когда надо остановиться?'''
+
{{oncolor|white|red|LXF}} :'''А бывают разногласия между разработчиками, о том, что важно и когда надо остановиться?'''
  
ДК: Ну что вы, у нас полное согласие всегда и во всём. [Смеется] Да нет, по-моему, вполне здоровая ситуация, когда спорят на тему «как лучше это сделать?» или «подходит это сюда или нет?». Если вы посмотрите на списки рассылки, у нас там очень много талантливых людей, они проверяют наши решения и рассматривают их под разным углом, так вот, если на эти списки взглянуть, вы увидите массу разногласий по теме, как правильно работать.
+
{{oncolor|white|red|ДК}} :Ну что вы, у нас полное согласие всегда и во всём. [Смеется] Да нет, по-моему, вполне здоровая ситуация, когда спорят на тему «как лучше это сделать?» или «подходит это сюда или нет?». Если вы посмотрите на списки рассылки, у нас там очень много талантливых людей, они проверяют наши решения и рассматривают их под разным углом, так вот, если на эти списки взглянуть, вы увидите массу разногласий по теме, как правильно работать.
  
 
Так что, я думаю, разногласия – это очень ценная вещь. А в конечном итоге нам помогает тот факт, что Perl – это то, что о нем говорит Ларри.
 
Так что, я думаю, разногласия – это очень ценная вещь. А в конечном итоге нам помогает тот факт, что Perl – это то, что о нем говорит Ларри.
  
LXF: '''Это здорово.'''
+
{{oncolor|white|red|LXF}} :'''Это здорово.'''
  
ДК: Ну, должен быть кто-то, в кого все упирается, иначе никуда не придешь. И почему в качестве такого человека хорошо иметь Ларри – Ларри начисто лишен эго, применительно к данной разработке. Он хочет слышать достойные идеи от других, и я видел, как он целиком соглашался с предложениями людей, которые вообще впервые оказались в списке [рассылки]. Ему не важно, кто выдвинул идею, ему важно только, насколько эта идея разумна.
+
{{oncolor|white|red|ДК}} :Ну, должен быть кто-то, в кого все упирается, иначе никуда не придешь. И почему в качестве такого человека хорошо иметь Ларри – Ларри начисто лишен эго, применительно к данной разработке. Он хочет слышать достойные идеи от других, и я видел, как он целиком соглашался с предложениями людей, которые вообще впервые оказались в списке [рассылки]. Ему не важно, кто выдвинул идею, ему важно только, насколько эта идея разумна.
  
LXF: '''Вы считаете, что после Perl 6, разработка Perl станет в большей степени ориентирована на сообщество?'''
+
{{oncolor|white|red|LXF}} :'''Вы считаете, что после Perl 6, разработка Perl станет в большей степени ориентирована на сообщество?'''
  
ДК: Думаю, это весьма вероятно. Именно это мы наблюдаем в Perl 5. В конце концов, основная разработка Perl 5 сейчас ведется людьми из Perl 5 porters. И хотя Лари по-прежнему обладает правом полного вето, он крайне редко им пользуется. И он обычно оказывает всяческую поддержку, если они хотят что-то сделать, потому что Perl 5 porters отлично знают код.
+
{{oncolor|white|red|ДК}} :Думаю, это весьма вероятно. Именно это мы наблюдаем в Perl 5. В конце концов, основная разработка Perl 5 сейчас ведется людьми из Perl 5 porters. И хотя Лари по-прежнему обладает правом полного вето, он крайне редко им пользуется. И он обычно оказывает всяческую поддержку, если они хотят что-то сделать, потому что Perl 5 porters отлично знают код.
  
LXF: '''А какие части Perl 6 вы любите больше всего?'''
+
{{oncolor|white|red|LXF}} :'''А какие части Perl 6 вы любите больше всего?'''
  
ДК: С предвзятой точки зрения, один из моих любимых разделов – это функция объединений (junctions). Потому что я часто думаю о том, что объединения – мой единственный вклад в компьютерные науки. Объединения – это такая разновидность принципа квантовой суперпозиции в Perl 6: например, бывают величины, равные 5, 6, 7 и 8 одновременно. Это необыкновенно удобно, потому что если у вас есть длинный список всяких вещей, вы можете свести их в одну величину, а затем достаточно одного теста для проверки на равенство любой из них.                                                               
+
{{oncolor|white|red|ДК}} :С предвзятой точки зрения, один из моих любимых разделов – это функция объединений (junctions). Потому что я часто думаю о том, что объединения – мой единственный вклад в компьютерные науки. Объединения – это такая разновидность принципа квантовой суперпозиции в Perl 6: например, бывают величины, равные 5, 6, 7 и 8 одновременно. Это необыкновенно удобно, потому что если у вас есть длинный список всяких вещей, вы можете свести их в одну величину, а затем достаточно одного теста для проверки на равенство любой из них.                                                               
  
 
Например, у вас есть список неприемлемых паролей, и вы можете создать одну скалярную величину, которая равна любому из них. Затем вы можете сказать: «Дайте мне ваш пароль, и если он равен этой одной скалярной величине, значит, он равен и любому [из неприемлемых паролей]». Дело в том, что благодаря такой структуре можно – по крайней мере, теоретически – параллелизовать этот тест. Тут известно, что вам надо просто проверить равенство с любой величиной, а они совершенно независимы, и если это не так – применительно к любой из них – у вас есть возможность вернуться к исходной точке кратчайшим путем. Это же столбовая дорога к параллелизации. Вы можете просто ввести в Perl: if $password eq any(@existing_passwords). И вы получаете возможность параллелизовать это, причем написать это на практически обычном английском языке.
 
Например, у вас есть список неприемлемых паролей, и вы можете создать одну скалярную величину, которая равна любому из них. Затем вы можете сказать: «Дайте мне ваш пароль, и если он равен этой одной скалярной величине, значит, он равен и любому [из неприемлемых паролей]». Дело в том, что благодаря такой структуре можно – по крайней мере, теоретически – параллелизовать этот тест. Тут известно, что вам надо просто проверить равенство с любой величиной, а они совершенно независимы, и если это не так – применительно к любой из них – у вас есть возможность вернуться к исходной точке кратчайшим путем. Это же столбовая дорога к параллелизации. Вы можете просто ввести в Perl: if $password eq any(@existing_passwords). И вы получаете возможность параллелизовать это, причем написать это на практически обычном английском языке.
Строка 74: Строка 75:
 
А что до пристрастий, я люблю всякие милые мелочи. Например, то, что теперь у нас есть функция «print line» в Perl, потому что в 70% всех напечатанных выражений приходится в конце ставить новую строку. Меня это просто бесило! А теперь есть маленькая функция say – вы просто пишете say $whatever, а она сама вставляет перевод строки. Штука тривиальная, такое можно ввести в любой язык, но немного найдется языков, которые это сделали, да ещё столь изящно.
 
А что до пристрастий, я люблю всякие милые мелочи. Например, то, что теперь у нас есть функция «print line» в Perl, потому что в 70% всех напечатанных выражений приходится в конце ставить новую строку. Меня это просто бесило! А теперь есть маленькая функция say – вы просто пишете say $whatever, а она сама вставляет перевод строки. Штука тривиальная, такое можно ввести в любой язык, но немного найдется языков, которые это сделали, да ещё столь изящно.
  
LXF: '''Вы довольны, что Perl 6 усилил объектную ориентированность?'''
+
{{oncolor|white|red|LXF}} :'''Вы довольны, что Perl 6 усилил объектную ориентированность?'''
  
ДК: Да, думаю, было бы неправильно не признать этого. В смысле практического применения языка, факт наличия формализованной объектно-ориентированной структуры классов означает, что можно заниматься ОО-программированием; это легко делать в Java, C# и C++, а теперь не менее легко и в Perl, и так же понятно... На самом деле, мы внесли в него такое, чего нет во всех этих языках. Я думаю, это будет очень важным отличием. Видимо, я меньше думаю об этом, чем мог бы, потому что почти не занимаюсь объектно-ориентированным программированием. Но я знаю, что для тех, кто им занимается, это будет, вероятно, супер-функция в Perl 6. То, что теперь можно писать классы с должным образом объявленными компонентами атрибутов и методами, наверное, окажет самое сильное позитивное воздействие из всего, о чем мы говорили. Поэтому, конечно, меня это очень радует, но я об этом даже не думаю, потому что в Perl 6 это вообще-то фундаментально.
+
{{oncolor|white|red|ДК}} :Да, думаю, было бы неправильно не признать этого. В смысле практического применения языка, факт наличия формализованной объектно-ориентированной структуры классов означает, что можно заниматься ОО-программированием; это легко делать в Java, C# и C++, а теперь не менее легко и в Perl, и так же понятно... На самом деле, мы внесли в него такое, чего нет во всех этих языках. Я думаю, это будет очень важным отличием. Видимо, я меньше думаю об этом, чем мог бы, потому что почти не занимаюсь объектно-ориентированным программированием. Но я знаю, что для тех, кто им занимается, это будет, вероятно, супер-функция в Perl 6. То, что теперь можно писать классы с должным образом объявленными компонентами атрибутов и методами, наверное, окажет самое сильное позитивное воздействие из всего, о чем мы говорили. Поэтому, конечно, меня это очень радует, но я об этом даже не думаю, потому что в Perl 6 это вообще-то фундаментально.
  
LXF: '''Как вы думаете, с какими проблемами столкнется сообщество Open Source в следующие пять лет?'''
+
{{oncolor|white|red|LXF}} :'''Как вы думаете, с какими проблемами столкнется сообщество Open Source в следующие пять лет?'''
  
ДК: [Долгая пауза] Думаю, проблема для сообщества Open Source в следующую половинку десятилетия – как конкурировать, не становясь конкурентами. Мы должны сохранить веру в то, что философская основа нашего существования, того, чем мы занимаемся, действительно правильна, правильна настолько, что мы сумеем выжить, продолжая делать то, что делаем. Нам придется решать, как стать мейнстримом и при это не угодить ни в одну из ловушек мейнстрима – и не поддаться существующей практике. Меня не удивляют фирмы, которые закрывают код, вместо того, чтоб открыться настолько, насколько возможно; по-моему, у них просто сдают нервы. Думаю, вполне понятно, что множество начинаний уже продемонстрировало: с философией Open Source, оставляя код открытым, вполне возможно жить, да ещё и получать прибыль.
+
{{oncolor|white|red|ДК}} :[Долгая пауза] Думаю, проблема для сообщества 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]

Версия 19:52, 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

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