Recursia tail în JavaScript: standardul există, optimizarea nu. Pregătește-te de stack overflow
ES2015 a promis optimizarea cozii, dar browserele au ignorat-o – recursiunea ta tot crapă cu depășirea stivei.

Vă aduceți aminte când ES2015 ne-a promis că recursiunea tail va fi optimizată? Spoiler: majoritatea motoarelor JS n-au implementat niciodată această funcție. Drept urmare, codul tău recursiv scris cu mândrie încă poate să prăbușească stiva mai repede decât spui "stack overflow".
Autorul articolului explică de ce s-a întâmplat asta. Se pare că implementarea tail call optimization (TCO) nu e doar "bifează o căsuță". Ea strică stivele de apeluri, complică depanarea și necesită modificări serioase în motor. Browsere ca Safari au implementat-o, dar Chrome și Firefox au decis că nu merită. Acum avem un standard pe care nimeni nu-l respectă – clasic.
Ce face un dezvoltator? Să nu se bazeze pe TCO. Să folosească algoritmi iterativi, trampolining sau să nu scrie recursiune mai adâncă de 10 mii de apeluri. Autorul propune pattern-uri concrete: de exemplu, transformă recursiunea tail într-un buclă cu acumulator. Pare un pas înapoi, dar stiva rămâne intactă.
Comentariul studioului METABYTE: Și nouă ne place să scriem cod elegant, dar când crapă în producție, eleganța dispare. Mai bine pierdeți 10 minute în plus pe o variantă iterativă decât să explicați clientului de ce serverul a căzut din cauza a trei apeluri recursive. Amintiți-vă: stiva e ca sănătatea – trebuie îngrijită din timp.
URMATORUL PAS
Ti-a placut abordarea?
Aplicam aceleasi principii in proiectele clientilor: AI, automatizari, produse care nu se sting dupa lansare.