[python] cyklus for (bylo superman: zaporny systemovy cas)
superman
feed na centrum.cz
Úterý Listopad 28 16:33:46 CET 2006
> GvR nikomu nebrání vytvořit mnohem dokonalejší
> odnož Pythonu. Čeká jen na tebe.
Existuje několik odnoží Pythonu, například JPython, ten od GvR je z nich
nejpomalejší.
> Pokud jakákoliv konstrukce větvení nebo cyklu
> neprovádí testy a jiné příkazy způsobem, který
> by mohl mít za následek vedlejší efekt, a pokud
> je tělo takové konstrukce prázdné, dá se úplně
> vynechat.
Pokud testy volají funkci, pak jste s optimalizací skončil. A for cyklus
v Pythonu je veden tímto směrem, dokonce range má v budoucnu vracet
iterátor, tedy funkci.
> Ani v jazycích C/C++ neexistuje klasický cyklus
> for. A co je to vůbec klasický cyklus for?
> Ten co zavedl (nebo převzal) Pascal?
> Pro objektový přístup, který využívá různé
> typy kontejnerů (nejen pole) je průchod přes
> indexy příliš speciální.
Python, který i pro cyklus přes lineární číselnou řadu musí vytvářet
sekvenci, nebo iterátor je jen překážkou pro optimalizaci. Samozřejmě to
jde optimalizovat, ale je potřeba vědět speciální objekty a sekvence a
vidět dovnitř, tedy je to špinavý přístup.
> Pokud vím, je gramatika Pythonu LL(1) a v takovém
> případě může být pro interpret efektivnější
> (z hlediska rychlosti tvorby a snadnosti údržby)
> použít překlad rekurzivním sestupem. Už jsem z toho
> trochu vypadl. Opravte mě, pokud se pletu.
Efektivnější z hlediska snadnosti údržby je vždycky použití speciálních
nástrojů pokud fungují dobře a vymýšlel je někdo kdo skutečně chce
usnadnit práci. Z hlediska rychlosti tvorby také.
Dám jiný příklad, je efektivnější pro práci s daty, když chcete pracovat
s obrovským počtem údajů použít hotovou databázi, řekněme Oracle, nebo
si celou práci nabastlit sám? Včetně práci s diskovými stránkami,
tvorbou optimalizovaných dat, konstrukcí B stromů a indexů, a super
optimalizovanými algoritmy pro práci s daty? Na 100% zjistíte, že
použití hotové rozumné relační databáze znamená rychlejší práci s daty,
efektivnější využití místa na disku, větší možnosti a větší
spolehlivost. A to i kdybyste svojí práci s daty bastlil půl roku.
Stejně tak je to s parserem a gramatikou psanou ručně. Znám dva jazyky o
kterých to vím, a oba trpí omezením pro zdrojový kód i jinde. Ani gcc
nemá pro všechny jazyky ručně psanou gramatiku a používá lex + yacc, a
to jsou naprosto nejhorší nástroje, existují mnohem lepší.
A jak je to s efektivitou? Databáze sqlite se rozhodla, že nebude sql
příkazy parsovat ručně, ale použije hotový generátor gramatiky, nevím
ani jak se jmenuje. Problémy s tím nejsou, je to malé, rychlé, efektivní
a hlavně to funguje na 100%!!! A autor se mohl soustředit na to, aby
databáze byla lepší.
Při prohlížení manuálu k Pythonu se nemůžu zbavit dojmu, že značný čas
věnuje GvR právě parseru plus gramatice. Namísto toho by mohl zlepšit
věci jinde. Nemusel by třeba vyhazovat konstrukce jen proto, že jeho
horší gramatika, nebo větší náročnost tvorby gramatiky už prostě
nestíhá. Všimněte si, že v Pythonu je dost knihoven pro spojení Pythonu
s vnitřním formátem pythonovské gramatiky - token a spol.. a to je
špatně. Protože až se změní vnitřní gramatika, tak co?
Miloslav Ponkrác
Další informace o konferenci Python