Приглашенные докладчики на академических конференциях обычно люди именитые. Пользуясь возможностью сделать доклад о чем им хочется, они обычно рассказывают о собственном пути к успеху или о своих "детищах". Гвидо ван Россум не был исключением, и рассказал участникам конференции Foundations of Software Engineering о паттернах в Питоне. Доклад получился чересчур сложным для большинства людей, не знакомых с Питоном близко. Но тем не менее, достаточно интересным. Сам Гвидо предстал перед публикой с густой бородой, "Маком" под мышкой и футболкой с надписью "Google" спереди и "Python: Programming as Guido indented it to be" сзади. Кстати, к верхней крышке Мака был прикреплена очень похожая на калькулятор штука в прозрачном пакете. Я сначала так и написал - калькулятор. Но знающие люди просвятили, что это криптокарта ;) Сначала г-н ван Россум провел небольшую рекламную кампанию Питону, рассказав о нем как о "выполняемом псевдокоде", о легкости интеграции с другими решениями, с полиморфизмом а-ля "duck typing", с широкими и узкими интерфейсами и другими особенностями языка. И только после этого перешел к самим паттернам. Так, он упомянул, что много паттернов выглядят в Питоне по-иному, чем, например, в Java. Некоторые вообще исчезли за ненадобностью или уже встроены в язык (как factories, iterators). Такая особенность языка, как dynamic dispatch значительно упрощает множество паттернов, таких как, к примеру proxy и visitor. Factory pattern: при отсутствии "new" в языке всякий вызов равносилен созданию нового объекта. Таким образом, всякий класс является своим собственным factory. Singleton pattern: на логичный вопрос о том, как же создать тогда singleton, если любой вызов делает новый объект, Гвидо указал два возможных решения. Первый - переписывание __new__ и второй - создание модуля, так как модули - это класс и инстанциированная копия объекта одновременно. А при работе с __new__ можно также возвращать класс другого типа. Proxy pattern: был продемонстрирован на примере создания класса, который не должен разрешать доступ к записи в файл, а только чтение. В таком случае можно просто создать класс, создав свой __init__ и переопределив write, чтобы он возвращал исключение. А потом приравнять другие операции с файлами к нему writelines = truncate = write. Переопределить все остальные методы класса можно двумя строчками с использованием def __getattr__ Далее Гвидо перешел на динамические атрибуты и свойства, рассказав об особенностях __getattr__, __getattribute__, и __setattr__. Свойства могут переписывать get/set аттрибуты для отдельных имен. Iterators - итераторы встроены в Питон. Итераторы реализованы для разных типов данных и работают с каждым из них по-разному. Можно также писать собственные итераторы, через def __init__ и __iter__ У итераторов есть и своя алгебра, itertools, chain, izip, imap, ifilter, repeat, tee и т. д., которые могут быть комбинированы вместе. Memento, или восстановление состояния объекта. В Питоне имеется собственный протокол pickle, для большинства типов данных можно использовать Memento. State - или изменение класса объекта в зависимости от состояния. В Питоне можно изменить класс как таковой, но нужно убедиться, что заменяющий класс сделан для этого. Интерпретатор Питона в случае чего защитит только от segfaultов, а от съехавшей с катушек программы - нет. Отдельным моментом Гвидо с гордостью сказал о функциях высшего порядка, как о "фиче" языка. Хотя потом, при вопросах-ответах, все-таки сделал упор на объектную основу Питона. После выступления последовала короткая серия из вопросов и ответов. В частности, Гвидо спросили о возможности встраивания в Питон формальных методов проверки программ, на что он ответил примерно следующее: "когда я пытаюсь понять эти вещи, мой мозг взрывается, поэтому эти вещи могут появиться в Питоне только с будущим поколением. То есть только через мой труп". * * * Уже вечером мне представилась возможность в непринужденной обстановке задать Гвидо еще несколько вопросов персонально. В частности: Вопрос: работая теперь в Гугле, все ли время Вы проводите над Питоном? Ответ: примерно 50 на 50. Половину времени работаю над Питоном, другую половину - над проектами Гугла, использующим Питон. Вопрос: как Вы относитесь к тому, что варианты Питона встраиваются в java и .net? Ответ: я думаю, что это здорово! Это свидетельствует о популярности языка и его успехе. К тому же, я довольно много беседовал с авторами Iron Python и Jython на предмет соответствия последних стандартным юнит-тестам Питона. Вопрос: Вы упомянули о необходимости эволюции языков программирования. Где находится Питон? Как скоро ли он перестанет эволюционировать, как, например, С? Ответ: Питону еще совершенствоваться и совершенствоваться. В 2007 году мы планируем выпустить Питон-3000, в котором попытаемся избавиться от всех проблем, накопившимся в языке за последние 15 лет. К сожалению, не все вещи будут совместимыми, поэтому мы также попытаемся создать ряд инструментов, делающих конвертацию кода легкой и простой задачей.
|