LXF89:Что за штука...

Материал из Linuxformat.

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

Что за штука… Python 3000

Переписать заново язык программирования, особенно такой популярный, Python – вещь непростая. Ник Вейч размышляет, настало ли время обновления...


Python 3000? Я думал, это сказки.

Хм! Ну да, вроде того. Когда Гвидо ван Россуму [Guido van Rossum, создатель Python] намекали, что не худо бы включить очередную полезную для языка, но сложную в реализации штуку, он обычно отвечал, что непременно включит ее в Python 3000 (или py3k). Так что это что-то вроде Святого Грааля для Python, если хотите.


Но я так понял, что сказка становится былью?

О да, Гвидо впервые заговорил о py3k как о реальном проекте еще в 2000 году. А сейчас это реальная версия, и когда будет закончена – станет выпуском Python 3.0. Данный релиз, как обещалось все эти годы, будет содержать фундаментальные изменения. Изменение первой цифры номера версии позволяет провести радикальные переделки, если надо – вплоть до нарушения обратной совместимости...


Стоп-стоп-стоп... так что, мой код на Python 2.x не запустится под Python 3000, если его не переписать? Разве это не ужасно?

И да, и нет. Приятно, конечно, когда старый код продолжает работать в новой среде. Но некоторые планируемые изменения в языке делают обратную совместимость непрактичной. Чтобы что-то заработало лучше, оно должно работать иначе. Гвидо сказал, что Python 3000 – это «единственный шанс сделать Python эффективнее». К тому же самое время починить множество мелких поломок.


Хмм... Вы меня не убедили.

Ладно, вот вам пример из целочисленной математики. Если X равно 1, а Y равно 2, каков будет результат X/Y?


Не ожидал тут испанской инквизиции...

[Демонический хохот] Вот и никто не ожидает... Не увиливайте от ответа. Вы его знаете?


Ну, это вопрос с подвохом. Целочисленная математика, говорите? Мой тяжкий опыт отладки где-то первой дюжины программ на Python говорит, что 1/2 вообще-то равно 0.

Верно! Ответ правильный, но большинство людей такого не ожидает. Большинство ожидает, что 1/2 вернет 0,5. Это еще тяжелее усвоить, когда вместо чисел в выражении используются переменные, в особенности начинающим программистам.


Но если это изменить, то угробится огромный объем существующего кода...

Да, это так, но не говорите, что вас не предупреждали – в буквальном смысле слова! Если вы используете оператор / для деления целого числа на целое, то получите предупреждение. Во всяком случае, если запустите Python с ключом –Qwarnall. Фактически, необходимым условием изменения работы Python является выдача предупреждений о том, что такой код скоро канет в Лету, еще в версии 2.x.


Пусть так, но ведь пострадает множество людей, у которых есть тонны готового кода. Нет ли способа сделать его Python 3000-совместимым?

Скорее всего, автоматический конвертор сделать не получится. Но что мешает продолжать запускать этот код на Python 2.x? От добра добра не ищут...


Выходит, разработка ветки Python 2.x будет продолжаться?

Да, пока это будет нужно людям. Никто не собирается бросать поддержку текущей ветви Python. Гвидо планирует, что разработка Python 2.x не прекратится вплоть до выхода Python 3.2, а то и дольше (при этом он не думает, что паузы между релизами py3k окажутся меньше, чем были между релизами 2.x). Последние версии ветви 2.x скорее всего будут содержать некоторые элементы py3k.


И как это будет работать?

Ну, это зависит от конкретного элемента... Некоторые новые возможности можно реализовать более чем одним способом. Это не слишком похоже на Python, но может упростить переход на Python 3000.


Ладно, вы меня уговорите, если мы наконец получим работающий тернарный оператор.

А он уже есть. Хотя его ожидали только в py3k, он был реализован еще в сентябре как часть Python 2.5. Так что Гвидо не так уж плох.


Ого! Что еще можно стянуть из py3k?

Во-первых, будет сделано множество изменений в подсистеме ввода-вывода, она станет гораздо проще. Например, когда разрабатывался Python, Unicode еще не было, но ведь он решает много проблем и вообще хорошая штука. Так что в Python 3000 весь текст будет выводиться в Unicode.

Кстати о вводе-выводе: похоже, оператора print больше не будет...


Что?! И как, по-вашему, я буду выводить данные из скриптов?

Не волнуйтесь: print будет реализован как функция. Ведь на самом деле он оператор только потому, что записывается как оператор. Сделать его функцией гораздо разумнее, примерно так: print(x,y,z).


Ничего подобного! Придется вводить кучу скобок на каждом шагу!

Ну, в целом это сэкономит ваше время. Представьте отладочный код, натыканный повсюду в вашей программе и выводящий много-много экранов данных. Когда нужда в нем отпадет, и вы захотите преобразовать его в вызовы функции сохранения в журнале, достаточно будет воспользоваться функцией поиска и замены строки или даже подменить в модуле, определив функцию для замены (хотя этого делать не рекомендуется: такой код плохо читается).


Короче, в Python 3000 я не смогу ни вычислять, ни показывать результаты привычным способом. Прекрасно. Чем еще порадуете?

О, осталось совсем немного. Всего-навсего удаление лямбда-функций, reduce() и других конструкций функционального программирования...


Во как! Знать бы еще, что такое лямбда-функция.

Лямбда-функция – это короткая функция, определяемая прямо на месте использования. Вообще-то приговор ей отсрочен. Но она по-прежнему является занозой в чистом и ясном коде на Python. Однако Гвидо утверждает, что reduce («свертка», функция, выполняющая некоторую операцию над списком и возвращающая скаляр) обычно используют либо в тривиальных случаях, либо в непознаваемых. В интересах ясности кода гораздо лучше будет использовать явный цикл.


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

Python всегда и был устроен именно таким образом. Вы взгляните на правила форматирования! Один из основополагающих принципов – тот, что очень, очень трудно, если не невозможно, написать непонятный код на Python. Для Python 3000 это будет еще более верно!


Видимо, вопрос только вот в чем: когда выпустят Python 3.0?

Текущий план подразумевает выпуск в 2007 году, но окончательную версию вряд ли стоит ожидать до 2008 года.


Ну-ну... Вы хотите сказать, он выйдет раньше, чем Perl 6?

Гвидо твердо решил, что ситуация будет не такая, как с Perl 6. Это одна из причин, почему py3k не будут переписывать с нуля. А другая – Python 2, в конце концов, не так уж плох!


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

Да, но сейчас он вполне серьезен. Честно. Python сейчас важнее, чем когда бы то ни было – его используют везде. Вспомните об утилитах администрирования в Fedora, или о той куче программ, на основе которых работает Google.... потому-то они и наняли Гвидо. Он говорит: «Назовите сторонний модуль для Python, и, скорее всего, в Google найдется человек, который его использует». А как вы думаете, сколько времени они оставляют Гвидо на разработку Python?


Мм...

Ну попробуйте хотя бы предположить...


Ноль?

Сейчас как схвачу подушку…


Погодите! Пока вы не начали, скажите, как мне быть в курсе стремительного развития py3k?

Не язвите. Посмотрите http://www.python.org/dev/peps/pep-3000 для начинающих и уверуйте!

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию