Article View: pl.comp.lang.python
Article #28096Re: Interpretowany czy kompilowany?
From: zbrodel
Date: Wed, 18 May 2011 08:26
Date: Wed, 18 May 2011 08:26
61 lines
3511 bytes
3511 bytes
On 16.05.2011 22:18, Rob Wolfe wrote:
>
> Ok, mamy różne pojęcie o tym jaki błąd jest oczywisty. ;)
> Tak, interfejsów statycznie nie da się sprawdzić w Pythonie.
> Wspominałem też o testach, które by tu pasowały jak ulał.
Pokrycie testami 100% kodu ze wszystkim ścieżkami jest dosyć trudne.
Przykład ze stosunkowo małego systemiku:
Była sobie struktura danych, która pierwotnie zawierała kilka wartości
("kilka" jak wiadomo to przedział <0..3> ) ;) i była zwyczajną listą. Na
pewnym etapie tych wartości skokowo przybyło i żeby się nie gubić co
jest gdzie, podjęto decyzję że zamiast listy będzie słownik. Wykonano
mały refactoring.
Gdzieś była funkcja, która musiała przejechać się po wartościach z
otrzymanej struktury. Pierwotnie iterowała po liście, teraz iterowała po
values() ze słownika. Testy odpalone i było git.
Po jakimś czasie zanotowano pad. Co się okazało? W innym miejscu była
sobie zapomniana funkcja generująca w pewnych (rzadkich) przypadkach
defaulty dla struktury. I ona dalej generowała listę. Ta funkcja też
była pokryta testem, ale był to inny zestaw testów i też przez
zapomnienie nie został przerobiony. I dla niego poprawnym wynikiem była
wygenerowana lista, a nie dict. :(
Banalny błąd. Powiesz że coś takiego nie powinno się zdarzać. Ale
niestety czasami się zdarza.
> Są też asercje. Można kontrolować interfejsy w runtime'ie itp.
Kontrolowanie w runtime ma tę wadę, że odbywa się w runtime ;).
Dla usera jest w zasadzie obojętne, czy dostanie kawał traceback-a, czy
okienko dialogowe z informacją "Funkcja foo_shmoo_bar_extended otrzymała
nieprawidłowy parametr wywołania: powinien być <type 'dict'>, jest <type
'list'>".
Ważne że program nie bangla.
>
> Chodzi mi o to, że w praktyce nie zauważyłem, aby statyczne
> typy pomagały. Wręcz przeciwnie, muszę się narzeźbić jak debil,
> aby zadowolić kompilator,
Ja nie neguję, że w pythonie pisze się łatwiej i szybciej. I przyjemniej ;)
Za to przy refactoringu bywa na odwrót.
> Natomiast często słyszę jak to w Pythonie można zrobić głupią literówkę
> i szukać naście dni. To jest kompletna bzdura i z tym walczę.
Pewnie że bzdura. Niemniej w pythonie _można_ zrobić literówkę i przy
dużym braku szczęścia objawi się na produkcji.
Pzdr
J.
Technical Details
Message-ID:
<iqvvr0$1f9$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mailReferences:
<iqmlha$r29$1@news.onet.pl> <4dcee603$1$2437$65785112@news.neostrada.pl> <iqo0j1$g9u$1@news.onet.pl> <87boz3anea.fsf@smsnet.pl> <iqqk2o$oh7$1@news.onet.pl> <0601cb5b-befa-46ba-9d1c-f105c81369fe@r35g2000prj.googlegroups.com> <iqrlte$rfe$1@news.onet.pl> <87k4dqe6vw.fsf@smsnet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail From: zbrodel@tlen.pl Newsgroups: pl.comp.lang.python Subject: Re: Interpretowany czy kompilowany? Date: Wed, 18 May 2011 10:26:08 +0200 Organization: http://onet.pl Lines: 63 Message-ID: <iqvvr0$1f9$1@news.onet.pl> References: <iqmlha$r29$1@news.onet.pl> <4dcee603$1$2437$65785112@news.neostrada.pl> <iqo0j1$g9u$1@news.onet.pl> <87boz3anea.fsf@smsnet.pl> <iqqk2o$oh7$1@news.onet.pl> <0601cb5b-befa-46ba-9d1c-f105c81369fe@r35g2000prj.googlegroups.com> <iqrlte$rfe$1@news.onet.pl> <87k4dqe6vw.fsf@smsnet.pl> NNTP-Posting-Host: pae82.internetdsl.tpnet.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1305707168 1513 46.171.4.82 (18 May 2011 08:26:08 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Wed, 18 May 2011 08:26:08 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110424 Thunderbird/3.1.10 In-Reply-To: <87k4dqe6vw.fsf@smsnet.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit