Oto Buchta napsal(a):
>> "We should forget about small efficiencies, say about 97% of the time:
>> premature optimization is the root of all evil."
>
> Prestoze je tento citat o necem malinko jinem, presto s nim
> nesouhlasim. Presto si samozrejme mnoho z vas spolu s Cimrmanem rekne:
> "Je mozne, ze se vam to nelibi, muzete s tim dokonce i nesouhlasit,
> ale to je to jedine, co s tim muzete udelat."
>
> Pokud to totiz clovek zabali hned po zjisteni vysledku, nemuze se
> nikdy dobrat neceho lepsiho. Ono totiz dopredu vedet, ze se souhrn
> vsech optimalizaci nedosahne lepsich vysledku nez tri procent, je
> nesmysl.

Ne zcela doslovny preklad: "Zhruba v 97% pripadu bychom meli zapomenout na
male vykonnostni optimalizace: predcasna optimalizace je puvodem vseho
zla."

Od roku 1974 se vsak svet programovani zmenil a zatimco pred 30 lety bylo
mozne odhadnout, jake instrukce procesor provede (pro dany program v C),
dnes je (pro program v Jave) takovy odhad mnohem slozitejsi. Souvisi to s
tim, ze JIT provadi spoustu optimalizaci, ktere jsou casto rizeny
heuristikami. Navic se tyto optimalizace meni s kazdym buildem JDK (napr.
JDK 1.6.0_12 a 1.6.0_13 mohou byt v tomto smeru velmi rozdilne). Takze
kdyz se nekomu podari "mikrooptimalizace" typu "prochazeni pole odzadu je
rychlejsi", v dalsim buildu JDK uz to nemusi fungovat. A protoze JIT je
psan tak, aby umel optimalizovat hlavne "hloupy" kod, je lepsi psat
"hloupy" kod a nechat optimalizaci na JITu. (Brian Goetz: "Write dumb
code"). ("Hloupy" kod oznacuje kod bez vykonnostnich vychytavek, ne neco
hloupeho :).

Aktualizace zmineneho citatu pro soucasnost by mohla znit: v 99.9% pripadu
zapomente na drobne optimalizace. Nikdy neoptimalizujte na zaklade odhadu.
Pokud chcete (ci potrebujete) optimalizovat, zmerte vykonnost pred
optimalizaci i po ni a pouze pokud se optimalizace ukaze jako ucinna, tak
ji pouzijte.
A dalo by se i pokracovat, napr.: s optimalizacemi vzdy zacnete tam, kde
program travi nejvice casu.

Z.T.
-- 
Zdenek Tronicek
FIT CTU in Prague

Odpovedet emailem