METABYTE
Inapoi la articole

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.

9 mai 20262 min de citit
Recursia tail în JavaScript: standardul există, optimizarea nu. Pregătește-te de stack overflow

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.