superman > > 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.
Pokud ta funkce nemá vedlejší efekt (což jsem zmínil) pak ji ani nemusím volat, abych mohl celou konstrukci vypustit. A můžu to udělat právě optimalizací v AST, tedy jakoby na úrovni přeparsovaného zdrojového textu. Problém je, jak zjistit, že ta funkce nemá vedlejší efekt. Iterátor není funkce. Je to objekt. A jeho metoda next() typicky nemá vedlejší efekt (pokud si ho tam někdo sám nenaprogramuje). Trošku horší je to s generátory, protože vecpat tam vedlejší efekt (třeba print)... udělat tuhle chybu můžeme jaksi přirozenějším způsobem ;o) > > 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. Konstrukce cyklu je navržena především pro programátory, nikoliv pro jakýkoliv optimalizátor. Z tohoto pohledu se ptám ještě jednou. Co to je "klasický cyklus"? Je jeho speciálnost pro programátora natolik důležitá, aby opodstatnila současnou existenci konstrukcí for/foreach? A v jakých jazycích se takový "klasický for" vlastně používá? pepr _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
