2016-04-07 1 views
1

J'ai donc lu que ECMAScript6 (ES6) est capable de TCO. Je l'ai vu comme démontré: (exemple brut sans but pratique ...)Les méthodes récursives des classes ES6 tirent-elles parti de TCO (Tail Call Optimization)?

const tcoFn = (acc) => { 
    if (acc > 10) { 
    return acc 
    } else { 
    return tcoFn(acc + 1) 
    } 
} 

Ma question est de savoir si oui ou non il est connu que nous obtenons TCO dans une classe ES6? Ainsi,

class TCOish { 
    tcoMethod(acc) { 
    if (acc > 10) { 
     return acc 
    } else { 
     return tcoMethod(acc + 1) 
    } 
    } 
} // End class definition 

Après quelques recherches sur le Interwebs cela reste peu clair pour moi et je me demande s'il y a une réponse définitive que quelqu'un peut me pointer?

À noter également que cela sera utilisé dans l'application Node où nous ne nous soucions pas du navigateur ou de la transpiration.

Merci.

+1

Il n'est pas implémenté dans le noeud – Amit

+3

https://kangax.github.io/compat-table/es6/ – Andy

+0

Le test pour cette optimisation est simple. Il suffit de lancer votre fonction avec une énorme quantité de récursion, et si vous obtenez une erreur "trop ​​de récursivité", alors ce n'est pas le cas. –

Répondre

0

Donc, à partir du link qu'Andy a fourni dans les commentaires ci-dessus, il semble que la réponse ne soit pas encore. Cela semble être généralement vrai sauf WebKit qui est un peu en avance dans l'arène TCO. Il convient de noter que la valeur de cette "réponse" se dégradera au fil du temps à mesure que le support TCO augmentera.