Python 3.0: kontrowersje

2008-12-15

Mój artykuł o Pythonie 3.0 wywołał kontrowersje. W paru miejscach nazwano mnie trollem, gdzie indziej pisano, że wypisuję bzdury. Dostałem też trochę listów na ten temat. Odpowiadam więc:

Przede wszystkim, nieco prowokacyjny tytuł (i forma) artykułu spowodowały, że nie została zrozumiana intencja. Gdybym miał streścić to co myślę jednym słowem to byłoby to słowo “szkoda!”. Główna wymowa tego, co napisałem, to żal że Python nie został bardziej poprawiony przy okazji takiej rewolucji w kompatybilności.

Nie jestem wielkim zwolennikiem Pythona. Ale niepotrzebnie wielbiciele Pythona się zacietrzewiają, bo nie jestem “wielkim zwolennikiem” żadnego języka. Od czasu, gdy przeczytałem tekst “Beating the Averages” Paula Grahama i zrozumiałem jak działa “The Blub Paradox”, staram się bardzo ostrożnie podchodzić do bycia zwolennikiem czegokolwiek. Staram się zawsze szukać lepszego i bardziej ekspresyjnego narzędzia (języka programowania), niezależnie od tego, który obecnie służy mi najlepiej.

Przykładowo, od kilku lat używam języka Common Lisp. Jestem pod wrażeniem tego, jak krótki, zgrabny a zarazem skomplikowany i poprawny kod można za jego pomocą napisać. Zauważam jednak również jego liczne wady i nie uważam go wcale za Język Dany Przez Niebiosa. Szczególnie, że wcześniej za najwspanialsze języki na świecie uważałem kolejno: C, C++, Python. Polecam podobnie pragmatyczne podejście zwolennikom dowolnego języka programowania.

Ciągnąc przykład dalej, odkryłem ostatnio Clojure. Oto przykład języka, gdzie twórca gruntownie przemyślał całą filozofię i zaprojektował zdumiewająco zgrabny i spójny język. Za jednym razem. Co więcej, nie jest to tylko “kolejny język X”, pojawiły się tam rzeczy innowacyjne: STM (Software Transactional Memory) wbudowane w język jako podejście do problemu współbieżności, albo metadane, jakie można aplikować do wszystkich zmiennych i jakie propagują się potem w systemie. W tej chwili Clojure jest moim zdaniem najbardziej obiecującym językiem programowania. Czy jest jednak Językiem Danym Przez Niebiosa? Nie! Jeśli poznam coś lepszego, tylko się ucieszę, zamiast fortyfikować się na z góry upatrzonych pozycjach.

Wracając do Pythona 3.0 -- porównajmy świeżość pomysłów z Clojure. Gdzie jest podejście Pythona do współbieżności? Jak mogę pisać aplikacje skalujące się na 64 rdzenie? Dlaczego nadal nie ma pełnoprawnych funkcji anonimowych będących domknięciami? Dlaczego multimetody nie są częścią języka?

Nie chcę wnikać w szczegóły rzeczy, które drażnią mnie w Pythonie. Są to drobne niekonsekwencje, które zbierają się -- każdą z osobna można wyśmiać (“czepia się!”), ale razem stają się już utrudnieniem. Zauważcie też proszę, że moje zarzuty nie są wcale powierzchowne. Nie toczę np. bojów o wcięcia, uważając takie dyskusje za równie idiotyczne co krytykowanie nawiasów w Lispach.

I wreszcie: rozumiem, że wersja 3.0 była planowana i dyskutowana od lat, wiem że można było się dowiedzieć co w niej będzie. Rozumiem cel stworzenia jej. Moją tezą jednak było “szkoda, że nie zaplanowano większych poprawek języka przy tak dobrej do tego okazji” i nadal tę tezę podtrzymuję. Języki programowania ewoluują i potrzebujemy coraz mocniejszych i mądrzejszych narzędzi by sprostać rosnącemu skomplikowaniu oprogramowania, jakie piszemy. Python 3.0 to za mały krok w ewolucji tego języka.

I jeszcze jedno -- ponieważ wygląda na to, że potrzebne są jednak komentarze (będzie można mi nawymyślać na miejscu!), to postaram się zrobić, by się pojawiły :-)