🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Interpretowany czy kompilowany?

#28096
From: zbrodel
Date: Wed, 18 May 2011 08:26
61 lines
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-mail
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>

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