Article View: pl.comp.lang.python
Article #8692Re: Największy problem Pythona.
From: Filip Dreger
Date: Thu, 12 May 2005 09:53
Date: Thu, 12 May 2005 09:53
61 lines
4826 bytes
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-mailReferences:
<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