Názor k článku Základní optimalizace v Go aneb pomáháme překladači od Calculon - To je ošemetné, v reálných aplikacích, kde jsem...

  • Článek je starý, nové názory již nelze přidávat.
  • 8. 12. 2022 11:22

    Calculon

    To je ošemetné, v reálných aplikacích, kde jsem dělal benchmarky, jsem většinou zjistil, že pomalost (částí) kódu nebývá často způsobená přímo kódem, ale něčím "externím". Třeba Rust se standardním alokátorem je šnek, ale člověk tam dá Mimalloc a najednou všechny válcuje. Go má alokátor optimalizovaný pro více vláken, takže test v rámci jednoho vlákna taky nedopadne oslnivě. Kromě alokátoru se často projeví runtime, třeba traity v Rustu jsou poměrně pomalé (dispatch na nich) a std::Any je úplně napikaču, kdežto typový switch v Go (a vůbec jeho typový runtime s asercemi apod.) je rychlý. Jó, kdybychom měli kód bez dynamické alokace paměti a bez dynamického dispatche, tak cokoliv založené na LLVM s přehledem vyhraje co do rychlosti (Rust, Julia), ale většina programů drhne jinde. (Na kód bez dynamické alokace paměti a bez dynamického dispatche ale zase stačí bohatě C).