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