ukazkove zdrojaky
Jan Kasprzak
kas na fi.muni.cz
Pondělí Březen 6 13:41:41 CET 2006
Pavel Kankovsky wrote:
: > Primarnim zdrojem informaci o kodu ma byt kod samotny (jeho
: > cistota a citelnost).
:
: To sice zni hezky, ale predstava, ze k pouzivani knihovnich funkci budu
: cist zdrojaky knihovny misto jeji dokumentace, mi pripada ponekud...
: ehm...zvlastni.
Ja se nebavim o knihovnich funkcich, ale o internich funkcich
urciteho programu (a nebavim se o cteni zdrojaku versus cteni manualu,
ale o cteni implementace versus cteni komentare nad tou implementaci).
: Ve skutecnosti ma byt primarnim zdrojem specifikace. Ono to samozrejme zni
: strasne akademicky, ale bez poradne specifikace vlastne nelze rict, jestli
: ten kod dela to, co delat ma. Selsky rozum to nekdy vyresi, ale casto take
: selhava.
:
: Nejlepsi je samozrejme formalni specifikace a kod doplneny strojove
: verifikovatelnym dukazem, ze teto specifikaci vyhovuje. :)
:-) Pro algoritmy/protokoly/... dost mozna, ale pro veci jako
uzivatelske rozhrani GUI aplikace asi tezko. Casto (rekl bych temer vzdy
snad krome jaderne elektrarny) neni cilem napsat 100% korektni kod (a ani
se to v tomto threadu neresi), ale vybalancovat snadnost psani kodu a jeho
naslednou udrzovatelnost. Obvykle taky neni predem zname zadani, nebo i
treba je, ale stejne se v prubehu casu meni. Cili vetsinou neni cilem
byt 100% korektni, ale byt pripraveny na to jednoduse delat zmeny. Proto
tady resime styl programovani a ne strojovou verifikaci algoritmu.
: > Kod plny goto je zlo, ale goto ma jedno platne a funkcni vyuziti
: > - osetreni chybovych stavu: podivejte se, jak probiha treba inicializace
: > ruznych driveru v jadre Linuxu - obvykle je to ve stylu
: [...]
: > Pokud byste tohle psal bez goto, utopil byste se ve vnorenych
: > blocich.
:
: A misto toho jsme se malem utopili v salatu (jinak to nelze nazvat)
: operaci, ktere neco delaji, a antioperaci, ktere je zase stornuji. :)
No, ty operace ktere neco delaji a ty ktere neco stornuji
tam musi byt tak jako tak. Podstatne je, ze kazda z techto veci
"temer" nenastava, cili pro cteni/porozumeni kodu neni podstatna.
Hmm, co je na tom salatoveho? Je to pekny linearni kod.
:
: Tohle neni priklad toho, kde je pouziti goto vhodne, ale priklad toho, kde
: je pouziti goto to mene spatne, kdyz podminky (pouzity programovaci jazyk
: atd.) umoznuji jen sama spatna reseni.
:
Trvam na tom ze mnou uvedene reseni zvysuje citelnost kodu
(cili nema cenu o tomto dal diskutovat, asi se teda na teto konkretni
veci neshodneme). Mnou popsane reseni je v podstate takova jednoducha
implementace vyjimek - predstavte si (tohle konkretni) goto jako
throw(). Je to totez - cilem je vyhnout se tahani si s sebou nejakych
dalsich stavovych promennych pro vec, ktera stejne temer nikdy nenastava,
ale je treba ji osetrit.
-Yenya
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Journal: http://www.fi.muni.cz/~kas/blog/ |
> Specs are a basis for _talking_about_ things. But they are _not_ a basis <
> for implementing software. --Linus Torvalds <
Další informace o konferenci Linux