que español ejemplos ecmascript definicion curso caracteristicas javascript functional-programming tail-recursion

español - ¿Están optimizados todos los motores de Javascript?



javascript pdf (6)

Actualmente, ninguna implementación de JS reconoce la recursividad de cola. Se están realizando cambios en ECMAScript 6, y como otros han dicho, hay un boleto abierto en V8

Aquí puede ver el ensamblador generado de V8 para una función de recursión de cola

gist.github.com/mcfedr/832e3553964a014621d5

Compare eso con cómo clang ha compilado la misma función en C

https://gist.github.com/mcfedr/63ad08370d856bad3694

V8 retiene la llamada recursiva, mientras que el compilador de C ha reconocido la recursividad final y la ha cambiado a un bucle

Tengo un algoritmo de búsqueda de rutas recursivo que he implementado en Javascript y me gustaría saber si alguno (¿todos?) Los navegadores posiblemente recibirán excepciones de desbordamiento de pila.



La optimización de la llamada de cola será compatible con el modo estricto de ECMAScript 6 en el futuro. Consulte http://www.2ality.com/2015/06/tail-call-optimization.html para obtener detalles.

Consulte http://kangax.github.io/compat-table/es6/ para conocer la compatibilidad actual del motor.

Por el momento (05-01-2018) los siguientes motores son compatibles con la optimización de llamadas de cola:

  • Safari 10
  • iOS 10
  • Kinoma XS6

soporte si está activada la función "funciones de JavaScript experimentales":

  • Nodo 6.5
  • Chrome 54 / Opera 41 La versión actual de la tabla compat no lo incluye más

La optimización de la llamada de la cola ahora está disponible en LispyScript que compila a javascript. Puedes leer más sobre esto here .



Prácticamente, todos los navegadores que encuentres perderán en "demasiada recursión". Aquí hay una entrada en el rastreador de errores V8 que probablemente será una lectura interesante.

Si se trata de una auto-recursión simple, probablemente valga la pena el esfuerzo de usar una iteración explícita en lugar de esperar la eliminación de la llamada final.