Автор: Олег Бройтман http://phd.pp.ru/ phd@phd.pp.ru
Это пятая статья данного цикла лекций.
Перепечатка. Оригинал статьи опубликован по адресу http://www.softerra.ru/review/oses/linux/14375/
Хотя у Python существует главная реализация, называемая CPython (потому что написана на C), существуют и альтернативные реализации интерпретатора. Jython состоит из двух частей; это, во-первых, компилятор из Питона в Джава byte-code, что позволяет писать апплеты на Питоне, а не Джаве; а во-вторых, интерпретатор Питона, написанный на Джаве. Stackless Python - специальный патч к CPython, позволяющий не использовать стандартный стек; это позволяет существенно увеличить глубину рекурсии и создавать такие нестандартные вещи как сопрограммы и генераторы (впрочем, в Python 2.2 генераторы реализованы без использования Stackless). Vyper - это альтернативная реализация на языке Caml; Vyper - это и интерпретатор, и компилятор. Интересное название, кстати. Viper - это "гадюка" (в обоих смыслах этого слова).
После трех увольнений (о чем я писал в первой статье), команда разработчиков нашла наконец теплое местечко, и развитие Питона понеслось вперед семимильными шагами. Python 2.1 и 2.2 правильнее было бы нумеровать 3.0 и 4.0.
Между версиями 1.5.2 и 2.0 Гвидо, еще работая в CNRI, выпустил версию 1.6. Это контрактная версия (Contractual Obligations release), которую он обязался выпустить перед первым увольнением. На нее не следует обращать большого внимания, а можно сразу перейти к 2.0.
Наиболее существенное в этой версии - изменение подхода к разработке. Дерево CVS переехало на SourceForge. Благодаря этому процесс разработки стал более открытым, более видимым для пользователей, появились механизмы обратной связи (bug tracker).
Появился механизм Python Enhancement Proposals (PEPs). PEP - это формализованный документ, предлагающий введение в язык новой конструкции, или в интерпретатор новой функциональности, или в библиотеку нового кода. Написать PEP может любой, и после обсуждения разработчики принимают решение - включать ли новый код в Питон, или отвергнуть.
Самая большая новая особенность Python 2.0 - поддержка Unicode. Появился новый тип данных - уникодовые строки, новые литералы, новые функции манипуляции строками, преобразования ASCII строк в Unicode и обратно, таблицы соответствия различных кодировок (koi8-r, cp1251 и прочие русские кодировки включены). Модуль codecs содержит функции перекодирования, включая функцию open, которая позволяет открыть файл с указанием кодировки файла, и кодировки данных в программе. Операции чтения/записи буду перекодировать данные автоматически. Соответственно, изменилась реализация регулярных выражений - они полностью поддерживают unicode.
У строк теперь появились методы: "Hello".upper(). Но строки по-прежнему неизменяемые объекты. Методы строк возвращают в результате операции новую строку. Методы нужны для того, чтобы единообразным образом обрабатывать как ASCII, так и Unicode строки.
Следующее новшество - списковое включение (list comprehension). Синтаксис его прост:
[ expression for expr in sequence1 for expr2 in sequence2 ... for exprN in sequenceN if condition ]. Это эквивалентно коду
result = [] for expr1 in sequence1: for expr2 in sequence2: ... for exprN in sequenceN: if (condition): result.append(expression)
Расширенное присваивание (
Появился новый, упрощенный синтаксис для вызова функций с переменным числом параметров. Это особенно удобно для вызова родительского конструктора - раньше для этого приходилось использовать apply. Появилась возможность переопределять в классах встроенный оператор in. Были изменены алгоритмы сравнения и удаления рекурсивных структур данных. Появился новый модуль gc для управления сборкой мусора; этот модуль может отслеживать рекурсивные структуры, на которые больше нет ссылок, и удалять их.
В версии 2.0 наконец-то появился пакет Distutils - набор средств для создания программ инсталляции ваших модулей, пакетов и программ.
В эту версию включен также большой пакет
PyXML, содержащий как
низкоуровневые средства (PyExpat - интерфейс к expat), так и
высокоуровневые - SAX2 и DOM. В нем применен механизм для установки
собственных пакетов пользователя, так что
Появилась поддержка OpenSSL. Если в момент компиляции Питона на машине имеются библиотеки OpenSSL - они будут подлинкованы к модулю socket, а библиотека httplib обретет обработчик протокола https.
Появилось много новых модулей, среди которых atexit (регистрация списка функций деинициализации модулей), mmap (отображаемые в память файлы, поддержка которых есть в UNIX и Windows), gettext (интерфейс к GNU gettext), robotparser (разбор файлов robots.txt), zipfile (ZIP-файлы, конечно же) и imputil (упрощают написание механизмов импорта).