2010/8/3 Pecinovský Rudolf <rudolf.pecinov...@i.cz>

> > Jak to Josh Bloch myslel nevim, ale ze & muze byt rychlejsi nez && me
> > neprekvapuje. Pri pouziti & procesor muze vyhodnocovat operandy
> paralelne,
> > zatimco u && musi pockat, jak dopadne vyhodnoceni prvniho operandu. Takze
> > pokud jsou operandy nezavisle a procesor vicejadrovy, tak to bude mozna i
> > docela caste.
>
> Jak ale překladač pozná, že operandy jsou nezávislé?
> To může poznat pouze tehdy, když jsou oba hodnotami proměnných.
>
> Jakmile je první z nich funkce, muselo by se analyzovat, zda tělo té funkce
> neovlivní hodnotu druhého operandu. U druhého se naopak musí vědět, jestli
> se vůbec smí vyhodnocovat.
>
> Na moje gusto příliš mnoho vedlejších pdmínek.
> Pak stačí drobná změna zadání, některá z těchto podmínek přestane platit a
> vyhodnocovaný výraz podmínka začne nenápadně poskytovat nekorektní výsledky.
>

Typicky priklad na to, kdy muze runtime podobne optimalizace delat jsou
operace bez sideefectu. A typickym prikladem operaci bez sideefectu jsou
operace nad imutable datovymi strukturami, Jedna ze situaci, kdy dobry styl
i podporuje rychlost.

...a samozrejme nikdo nerika, ze je to snadne. Takova optimalizace muze
napriklad dobre fungovat, ale runtime ji musi zrusit pri nejakem
classloadingu, ktery vyzaduje devirtualizaci nektere z volanych metod.

(A mimochodem: podobne optimalizace se mnohdy deji i pod pokickou procesoru.
Predstava, ze "co do nej prijde se vykona tak, jak to prislo" plati pri
pohledu zvenci, ne pri pohledu zevnitr.)
-- 
S pozdravem
        Ondřej Nekola

Odpovedet emailem