[python] kritika slovniku terminu Pythonu
Petr Mach
gsl na seznam.cz
Úterý Prosinec 17 17:17:48 CET 2002
Radek Hnilica wrote:
> On Tue, Dec 17, 2002 at 01:20:47PM +0100, Jarda wrote:
>
>>>Nekdo prohlasil ze Python je snadny jazyk pro zacatecniky,jak se v nem
>>>lehko a krasne programuje a jak je srozumitelny a vsichni ostatni to po
>>>nem papouskuji, ale skutecnost je jina. Pythonu schazi takove zakladni
>
> to lehke a krasne programovani musite vztahnout na Python versus
> ostatni jazyky ve sve dobe a kategorii. Sveho casu byl taky FORTRAN
> jednoduchy a krasny.
To ne, protoze tak se o nem mluvi ted a mluvi se tak o soucasnych
verzich. A imho Python takovy neni. Nerikam ze to je uplna spatny
jazyk, to by me nezajimal a nepsal bych o nem. Je to vyborny skriptovaci
jazyk a kdyz to vezmu komplexne, tak nicc jineho lepsiho neni, alespon z
toho co jsem poznal. Ale prave proto mi v nekterych ohledech pije krev.
Python ma sve nejslabsi stranky ve vecech, ktere maji moderni jazyky
ciste vyreseny.
>>>konstrukce jako je switch, inkrementace nebo preruseni nekolika cyklu
>>>najednou. Osobne bych tuto roli spis priradil PHP, ktere si na nic
>>>nehraje a je opravdu snadne a k zacatecnikum privetive. Akorat ze
>>>to bohuzel je specializovany jazyk a ma mizernou podporu objektu,
>>>vyjimek a podobne.
> Python je Python, je relativne jednoduchy ale nejjednodussi rozhodne
> neni. Ono taky zalezi jak tu jednoduchost pojmete. Jestli nutne
> potrebujete switch (case), tak muzete zkusit jiny jazyk. Ze
Potrebuju a nepotrebuju. Da se to obejit pres if-elif-else, ale vadi mi
to. Python ma byt udajne velmi jasny a prehledny, doslovne se o nem
tvrdi, ze ho jsou schopni cist i neprogramatori a pak takovehle lapsy.
Zrovna o switch nikdo nemuze tvrdit, ze by kod zneprehlednoval, spise
naopak.
> skriptovacich je velice pekny Ruby. A pokud chcete neco opravdu
> mocneho, tak pokud vam nevadi zavorky, tak neni jine volby nez
> Lisp/Scheme (Nejmocnejsi jazyky o kterych vim).
Ruby znam, jednu dobu jsem si myslel, ze z nej ucinim svuj hlavni
skriptovaci jazyk. Ale Ruby bohuzel neni moc zname, rozsirene a
podprovane. Tezko se k nemu shani ruzne knihovny a neumi unicode. To ho
bohuzel diskvalifikovalo. Jinak Ruby je prvni OOP jazyk, ktery se mi
opravdu libil a dosud jsem nepoznal zadn, ktery by se mi svym navrhem
libil vic. Bohuzel navrh jazyka neni vsechno. Jako jednodussi OOP jazyk
se mi libi i JavaScript. Ten vsak take bohuzel neni univerzalni a chybi
mu zas jine zakladni veci, ma napr. nedostatecnou podporu pro praci s
retezci a pod.
Casto take slysim hlasku, ze Python byl navrzen jako OOP jazyk. Jestli
to je pravda, tak byl navrzen desne mizerne. Protoze veci jako len(pole)
do cisteho OOP jazyka jednoduse nepatri. A jestli Python puvodne nebyl
OOP jazyk, tak pak bych rad vedel, kde se tyto famy berou. Stejne tak
bych red vedel, proc (at uz Python je jako OOP navrzen od pocatku nebo
ne) je tak nekoncistentni, ze kombinuje dohromady jak pole.append() tak
len(pole). Chapal bych, kdyby bylo mozne oboji, len(pole) i pole.len,
kde prvni varianta by tam byla z dduvodu zpetne kompatibility, ale
takhle? Pak mi to rozhodne nepripada jako jazyk dobry na vyuku.
Lisp/Scheme neznam. O lispu se nehovori jako o jazyku na vyvoj software,
spis jako o ad on jazyku pro skriptovani, takze jsem ho ani nejak
nezkoumal. Myslite ze je na neco takoveho vhodny? Pujde v nem jednoduse
psat rozsahlejsi veci, ma dostatecnou podporu pro moderni svet (soucasne
knihovny, GUI, unicode)? O scheme akorat vim ze existuje, to nesvedci o
nicem moc dobrym. Nemusi to nutne znamenat ze samotny jazyk je spatny,
bohuzel samotny jazyk neni vsechno. Jinak bych zustal u Ruby.
>>switch - myslim, ze casem bude, Python se vyviji
No jo, ale jestlize to je tak stary jazyk, jak se zde predklada
(srovnanim s Fortranem), pak by uz takovou zakladni konstrukci mel davno
mit. Navic to je jen priklad, me proste v mnoha ohledech prijde Python
desne tezkopadnej (treba i tim rozlisovanim slozenych prikazu odsazenim
kodu) a zastaralej. Jenze pak zas ma takovy veci jako jsou iteratory a
tak nevim co si o Pythonu myslet. Iteratory jsou bezva, akorat si nejsem
jist, nakolik je kod s iteratory pristupny a srozumitelny zacatecnikum.
>
> Vyviji, Python drive a nyni je veliky rozdil. Muzete si pockat ale
> nikdo vas nemuze nutit.
To bych mohl cekat az do smrti. Na Perl 6, ktery ma resit mnoho jeho
problemu a na nove objektove PHP, na nove Ruby s Unicode.
>>inkrementace - v cem je i++ lepsi nez i += 1, kdyz odhledneme od toho, ze
>>inkrementovani je
>
>
> Just a habit.
>
>
>>v assembleru rychlejsi nez scitani? Pokud jde o prefixove a postfixove
>>inkrementovani, to bych
>>do Pythonu rozhodne netahal...
Proc byste to tam netahal? Imho je to prehledne a nikdo nebude mit
problemy s chapanim. Python by mel mit nejaky cil, poslani. Bud je cilem
co nejjednodusi jazyk, kteremu se musi rict vse polopate (explicitne)
a co nejnazorneji (tedy nejdriv zmenim promennou a pak ji teprve
pouziji), ale pak to bude hodne ukecanej a tezkopadnej jazyk (a imho
tohle kod znecitelnuje taky a ne malo) a pak si myslim ze se nebude
hodit na nic jineho nez hrani. A nebo je cilem moderni dynamicky jazyk
pro snadny a rychly vyvoj skutecne pouzitelneho software a pak tam
takove vci patri. A imho ma Python blize k tomu druhemu. Ma na to krasne
vlastnosti jako "bajtovy kod", solidni rozsireni a podporu (coz je hlavi
duvod proc mu nyni davam prednost pred Ruby), moznost "zkompilovat"
program do spustitelneho balicku.
Jeste jedna vec mi na Pythonu chybi a at hledam jak hledam, nenachazim
reseni. Chtel jsem udelat program, ktery by fungoval v textovem rezimu a
byl prenositelny mezi windows a linuxem. Byl jsem velmi prekvapen, ze
Python pod windows neumi curses a ani jej tomu nelze naucit. Nenasel
jsem ani zadnou jinou univerzalni "TUI" knihovnu. Mel by pro me nekdo
nejakou radu jak na to?
> Dle meho nazoru to snizuje citelnost programu. Jsou jine zpusoby jak
> zkratit a zprehlednit zapis programu, pouzit jiny jazyk (ML, Haskel)
>>preruseni nekolika cyklu najednou - da se obejit tou vyjimkou. Osobne mi to
>>pripada porad
>>lepsi nez goto.
Nez goto jo. Ale napr. reseni z PHP (napr. continue 2) mi prijde idealni
a maximalne prehledne.
> Ted se mozna netrefim presne, konstrukce call-cc
> (call-with-current-continuation) je vasim "Swis army knife". Jeste jsem
> do ni nepronikl. POZN: Nevim je-li v Pythonu pritomna.
>
>
>>Pokud mate pocit, ze vam Python vicemene vyhovuje, ale chtelo by to sem tam
>>neco vylepsit,
>>muzete to navrhnout (ale tady to nepomuze, my vyvoj Pythonu neridime :-)
To muzu, ale obavam se, ze to bude narazet na tu legendu o jasnem a
citelnem kodu Pythonu, ktera by se tim narusila a ktera imho uz neni
pravdiva (jestli nekdy byla).
Petr Mach
Další informace o konferenci Python