🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #8692

Re: Największy problem Pythona.

#8692
From: Filip Dreger
Date: Thu, 12 May 2005 09:53
61 lines
4826 bytes

-- 
Contrary to what some people say, my OS _is_ a lifestyle choice, not a 
tool; however, I am against osizm
Użytkownik "Daniel Mróz" <beorn@alpha.pl> napisał w wiadomości 
news:d5v2tv$4l7$1@news.supermedia.pl...
> Filip Dreger napisał(a):
>> bezmyślnego (w pisaniu zmyślnym IDE nie pomaga wcale). Dobrym 
>> przykładem są standardowe gettery i settery: w javowych IDE są 
>> często generowane automatycznie, w pythonowych IDE nie są, ale ich 
>> użycie jest w ogóle błędem.
> Mozna prosic o rozwiniecie?

Odwołania do atrybutów i metod są drogie - każde kosztuje jeden lukap 
w haszu. Taka jest cena za dynamiczne typowanie. Owinięcie atrybutu w 
gettera/settera wymaga dwóch przeszukań słownika zamiast jednego, co 
może znacznie spowolnić program (szczególnie taki o dużej ilości 
kleju, a małej ilości logiki).
Z drugiej strony, nagrodą za typowanie dynamiczne jest możliwość 
przecięcia (trochę jak w programowaniu aspektowym) czynności takich 
jak sprawdzanie atrybutów obiektu. Dzięki temu w Pythonie można (nawet 
dynamicznie) podmienić atrybut na metodę w sposób przezroczysty dla 
pozostałego kodu. Robi się to jednak dopiero wtedy, kiedy jest to 
rzeczywiście potrzebne, a nie - jak w Javie - na wszelki wypadek.
Inna sprawa, że wielu programistów javowych przenosi swoje nawyki na 
Pythona, a potem narzeka na jego prędkość. W sumie to tak, jakby kupić 
sobie samochód i narzekać, że nie ma dyszla i trudno do niego konia 
zaprzęgać. Ostatnio widziałem program w Pythonie (zresztą grę typu 
roguelike), napisany przez gościa co to "programuje od dziesięciu lat 
w Javie i Pythonie i dlatego wie co mówi, kiedy oświadcza, że Python 
jest za wolny do aplikacji graficznych". W grze mamy klasę bazową 
'przedmiot' i całą kupę dziedziczących po niej piętrowo klas, 
różniących się na przykład dodaniem pojedynczego atrybutu. Np. klasa 
'przedmiot, który ma cenę' różni się od klasy 'przedmiot' obecnością 
jednego dodatkowego i rzadko używanego atrybutu 'cena' (i oczywiście 
jest zdefiniowana w osobnym pliku :-). W zasadzie można tak zrobić, 
ale w Pythonie jest to podejście kiepskie - większość atrybutów i 
metod obiektu 'przedmiot z ceną' wymaga wtedy przy odwołaniu do nich 
nie - jednego, a dwóch przeszukan słownika. W pierwszym przeszukaniu 
znajdzie się tylko atrybut najrzadziej wykorzystywany, bo specyficzny 
dla jednego rodzaju 'przedmiotu'. Naturalniejsze byłoby po prostu 
dodanie do obiektów klasy przemiot dodatkowych atrybutów, w miarę 
potrzeby.
W wypadku głębiej zagnieżdżonych klas we wspomnianej przeze mnie grze 
dochodziło do tego, że sprawdzenie współrzędnych x i y przedmiotu 
wymagało np. sześciu przeszukań słownika, bardziej pythonowa 
implementacja zmieściłaby się w jednym!
Dodatkowo, autor wykorzystał wiel zagnieżdżonych przestrzeni nazw, 
zawierających np. coś w rodzaju stałych, dodając kilka przeszukań 
słownika do operacji, które w ogóle powinny się bez nich obyć. Koniec 
końców, w programie napisanym przez "eksperta od Javy i Pythona" 
niektóre proste operacje (w rodzaju pobrania pozycji przedmiotu na 
mapie) wymagają dwunastu (liczyłem!) przeszukań słownika...

Zastrzegam, że nie czuję się faszystą - uwaga o zaprzęganiu konia do 
samochodu odnosi się także do sytuacji przeciwnej, czyli prób używania 
Javy do pisania zgodnego z filozofią Pythona.

pozdrawiam,
Filip 
Technical Details
Message-ID: <d5v9b9$clp$1@nemesis.news.tpi.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mail
References: <jsq2enrcpp4r$.nmpn8bgh83ge.dlg@40tude.net> <d5r1l6$flm$1@nemesis.news.tpi.pl> <1njwce3cqj46q.11f4hsu79ksgd.dlg@40tude.net> <1gvuz1q6mpswb.2m8e9kggxehl.dlg@40tude.net> <d5r6le$msg$1@nemesis.news.tpi.pl> <1wa07hpw18hk1.effbya3x2hyr$.dlg@40tude.net> <d5sd5s$ctc$1@gw.magellan.net.pl> <d5v015$3ta$1@nemesis.news.tpi.pl> <d5v2tv$4l7$1@news.supermedia.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mail
From: "Filip Dreger" <fdreger@amiga.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: Największy problem Pythona.
Date: Thu, 12 May 2005 11:53:10 +0200
Organization: tp.internet - http://www.tpi.pl/
Lines: 63
Message-ID: <d5v9b9$clp$1@nemesis.news.tpi.pl>
References: <jsq2enrcpp4r$.nmpn8bgh83ge.dlg@40tude.net> <d5r1l6$flm$1@nemesis.news.tpi.pl> <1njwce3cqj46q.11f4hsu79ksgd.dlg@40tude.net> <1gvuz1q6mpswb.2m8e9kggxehl.dlg@40tude.net> <d5r6le$msg$1@nemesis.news.tpi.pl> <1wa07hpw18hk1.effbya3x2hyr$.dlg@40tude.net> <d5sd5s$ctc$1@gw.magellan.net.pl> <d5v015$3ta$1@nemesis.news.tpi.pl> <d5v2tv$4l7$1@news.supermedia.pl>
NNTP-Posting-Host: pac142.warszawa.sdi.tpnet.pl
X-Trace: nemesis.news.tpi.pl 1115891881 12985 217.96.222.142 (12 May 2005 09:58:01 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Thu, 12 May 2005 09:58:01 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
X-RFC2646: Format=Flowed; Response
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit