Názor ke článku Kudy dál v kompilovaných jazycích? od Inkvizitor - Díky všem dosavadním diskutujícím za příspěvky, byť jenom...

  • 4. 12. 2007 20:52

    Inkvizitor (neregistrovaný)

    Díky všem dosavadním diskutujícím za příspěvky, byť jenom zlomek z nich se přímo týká mé otázky.

    Jeden citát pro Zil0gatora (a Vikiho a další): "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." -- Donald Knuth

    Jak už napsal Michal Kára v nějakém předchozím příspěvku, důležitá je hlavně asymptotická složitost algoritmu. Zvolit správnou datovou strukturu a algoritmus je základ rozumně rychlého běhu programu. Dnes málokomu záleží na jednom nebo několika CPU cyklech; o speciálních případech, kde to má význam, se nepřu.

    Dobrý programátor napíše rozumný program takřka v čemkoliv a "lepič" bude mít tendenci psát spaghetti kód v jakémkoliv jazyce. Ale ta některými nenáviděná Java umožňuje minimalizovat škody a i ty méně zdatné programátory svým způsobem vede.

    Pokud ale člověk neudělá botu v návrhu a základních algoritmech, má kompilátor nebo interpreter dost prostoru pro vlastní optimalizace. Proč třeba nenechat na něm, jestli inlinovat tu kterou funkci, když se z modulu nikam nevyváží? Vlk se nažere a koza zůstane celá - kód se (často) zpřehlední a zároveň je rychlost stejná, jako by ten kód byl napsán v každé metodě. Dříve se doporučovalo v C používat dereferenci namísto indexování a dnes to kompilátor zkompiluje do rychlého kódu tak jako tak. Ve funkcionálních jazycích například může kompilátor nahradit koncovou rekurzi iterací, funkcionální konstrukce typu map nebo reduce / fold bez destruktivních operací lze dokonce automaticky paralelizovat.

    V mnoha případech interpretované jazyky rychlostně postačují, přesto nejsem ani já občas nadšen dosaženým výkonem a ptám se, zda není možné spojit "výhody obou světů" nebo hledat rozumný kompromis. Několik tipů tady zaznělo, díky za ně. Samozřejmě uvítám další názory.