Python 3.0: *ziew!*

2008-12-08

Z hukiem wylądował Python 3.0. Zrobił nieco sensacji, bo przestały działać wszystkie programy wypisujące na ekranie “Hello, I am JanB”. Zdezaktualizowały się też wszystkie książki. Sądząc po zamieszaniu w sieci, można by oczekiwać nie wiadomo jakich rewolucji w języku.

A tymczasem... *ziew!*

Czytam “What’s new in Python 3.0” i własnym oczom nie dowierzam. Owszem, print już nie jest poleceniem tylko funkcją. Ale dlaczego, na litość wszelaką, nadal musimy znać różnicę między poleceniem, funkcją, a wyrażeniem? Pozmieniało się trochę interfejsów, nic specjalnego. Wpisanie 1/2 daje wynik... nadal niepoprawny. Owszem, 0.5 jest lepszą odpowiedzą niż 0 (do tej pory), ale poprawna (i dokładna) odpowiedź brzmi “1/2” a nie 0.5.

Idąc dalej, wreszcie opanowany został koszmar łańcuchów znakowych i Unicode. Wreszcie, bo było to nie do zniesienia. Python przespał tu trochę, bo inne języki dawno już operowały wyłącznie na jakiejś reprezentacji Unicode, nie twierdząc że znaki to bajty. Wielka nowość.

Przeglądając dalej -- nudy nudy... O, to jest typowe: literały dla zbiorów. Można napisać {1, 2} i będzie to zbiór. W typowo Pythonowym duchu jednak {} będzie pustym słownikiem, a nie pustym zbiorem, inaczej byłoby zbyt konsekwentnie.

Destrukturyzowanie: można było pisaćdef foo(a, (b, c)): ...a teraz już nie można. Trzeba pisaćdef foo(a, b_c): b, c = b_c.Zmiana według mnie na gorsze.

Co poza tym? Czyszczenie biblioteki, inny sposób na formatowane podstawianie w łańcuchach znakowych, poprawki w wyjątkach.

***Ziew!***

Nie rozumiem tego. Skoro już wyrzuca się do kosza kompatybilność (co może nie być złym pomysłem), to dlaczego zmieniać tylko tyle? Dlaczego nie poprawić rzeczy, które są nielogiczne i niekonsekwentne? Nie dodać czegoś naprawdę interesującego?

Kiedyś pisałem nieco w Pythonie, teraz używam go jeśli muszę. Zawsze poza niespójnością tego języka przeszkadzało mi, że ciągle się zmienia. Mam jedną książkę o Pythonie 1.3, jedną o 1.5, i jedną o wersjach 2.0 i 2.1. Na większości moich systemów jest zainstalowany Python 2.4 i 2.5, a teraz pewnie będzie też 3.0. Dlaczego jednak, skoro tak często się zmienia, nadal kręci się w kółko? Dlaczego nie wprowadza nic naprawdę nowego, albo chociaż odważniej nie wprowadza tego, co dobre? (na przykład porządnych anonimowych funkcji będących domknięciami)

Python za kilka lat odejdzie zapomniany, tak jak teraz odchodzi powoli Perl. Oba te języki zresztą mają z sobą sporo wspólnego -- każdy był projektowany na szybko, do konkretnych celów, a potem wielokrotnie poprawiany i rozbudowywany. W żadnym nie widać ogólnej wizji projektanta. Żaden nie jest elegancki ani nie wnosi nic istotnego do sposobu pisania programów.