Pokud by si chtěl někdo přečíst (místo sebestředného honění si ega několika zdejších jedinců) velice zajímavý a do detailu jdoucí článek o vývoji GC toho jazyka, co jinak patří do odpadu, tak ho najde zde: https://blog.golang.org/ismmkeynote.
Hezky tam vysvětlují, proč je generační kopírující GC na dvě věci. Jen jazyk nesmí navrhovat trotl, pak jsou různé epicykly nad GC nutné.
Jaká vlastnost jazyka způsobuje problémy?
Vlastnost ne, spíš implementace. Namátkou: 1) GC podle generací je kontraproduktivní, protože krátce žijící objekty můžou žít (a chcípnout) na zásobníku. 2) Kopírování objektů kvůli kompaktifikaci je zbytečná námaha (a ztráta času), když se použije nějaký kvalitní alokovací algoritmus, který nezpůsobuje fragmentaci. Go alokuje na haldě rozumně (nedochází k fragmentaci) a má dostatečně kvalitní escape analýzu, takže objekty se v naprosté většině alokují buď na zásobníku (takže se nemusí pracně tracovat a uklízet), nebo žijí na haldě dlouho. Jak říkám, to není primárně o jazyku, ale jen a pouze o vhodné implementaci runtimu. Podobně sofistikovaně funguje i překladač Rustu a Swiftu, jen používají jiné metody.
P.S. Když nějaký pseudovývojář tvrdí, že Go je odpad, má vždy na mysli syntax (kde jde v lepším případě o subjektivní pocit, většinou ovšem o nekompetenci), aniž by znal detaily implementace. Stupidní kiksy v syntaxi má např. i Haskell, ačkoliv jinak je navržený s matematickou přesností a jeho "vnitřnostem" rozumí ještě méně lopatoidů.