es el código para los lenguajes interpretados re-interpretado cada vez que se alcanza el límite?

StackOverflow https://stackoverflow.com/questions/922692

  •  06-09-2019
  •  | 
  •  

Pregunta

supongamos que no se genera un código de bytes para un programa, al igual que en Ruby, Perl o PHP, en este caso, es la línea 1 a continuación re-interpretado cada vez que alcance la línea de ejecución 1 de nuevo?

while ($indexArrayMoviesData < $countArrayMoviesData + $countNewlyAddedMoviesData) {
  # do something
}

es decir, si el bucle se ejecuta 100.000 veces, y luego esa línea se re-interpretados 100.000 veces?

y si es así, la creación de código de bytes no sólo ayuda a la puesta en marcha inicial de l programa, sino también durante la ejecución? (Porque el código no necesita ser re-interpretados de nuevo)

¿Fue útil?

Solución

Por lo general, va a convertir en código de bytes y que el código de bytes a continuación, se ejecuta.

Sin embargo, en el caso de PHP, por ejemplo, el código de bytes se regenera en cada vista petición / página. A menos que se instala un código de bytes (o código de operación, como se llama a menudo en el caso de PHP) caché, tales como XCache, APC o EAccelerator.

Otros consejos

Para los idiomas recientes, incluyendo el Perl, el código se ha precompilado antes de ser ejecutado. Así que la mayor parte del trabajo de análisis se realiza sólo una vez.

Esto no es el caso de conchas, que interpretan cada línea cada vez que los ejecutan.

Si el intérprete es razonable que se espera pueda comprobar si countArrayMoviesData $ o $ countNewlyAddedMoviesData fueron alterados durante el bucle y si no lo eran entonces la suma podría ser calculados y mantenidos.

Si los valores se actualizan dentro del bucle entonces con toda probabilidad, incluso el código de bytes requeriría una operación de adición a tener lugar, no por lo que es más eficiente.

Muy, muy pocos intérpretes harán esto. Un ejemplo es la edad de edad, ya no se utiliza para la intérprete HyperTalk Hypercard donde en realidad se podría volver a escribir el texto de su código mediante programación (que es sólo una cadena!)

Incluso los intérpretes que no producen código de bytes analizará su código en primer lugar, ya que es difícil hacer eso línea por línea y mucho más fácil de hacer todo a la vez. Por lo que un intérprete muy simple, básicamente, tener un árbol, con un nodo para el "donde" bucle con dos hijos: Uno. "Menor que" la expresión de la condicional, y una cuadra para el cuerpo del bucle

La respuesta a su pregunta, como saben todos los consultores, es "depende".

Tienes razón, en algunos lenguajes interpretados, esa línea puede ser reinterpretado cada vez. Sospecho que la mayoría de las conchas manejan más o menos de esta manera.

Las versiones originales de Basic también lo hacían de esta manera.

La mayoría de los intérpretes actuales al menos tokenize la lengua, por lo que el texto no necesita ser re-escaneada cada vez. Es decir, un programa BASIC-ish como

 00010 LET A=42
 00020 DO WHILE A > 0
 00025    LET A = A - 1
 00030 ENDDO

sería convertirlo en lo más mínimo a pequeñas muestras de las palabras clave y direcciones para la variable, algo así como

 LET    $0003, 42
 LABEL  00020 
 LETEST A, 0
 IFTRUEGOTO   00030
 SUB    $0005, $0003, 1
 GOTO   00020
 LABEL  00030

donde cada palabra en mayúsculas en la traducción es un solo número entero internamente. De esta manera, hay una sola pasada análisis léxico de traducirlo, seguido por el intérprete acaba de ser capaz de interpretar los valores de los símbolos.

Por supuesto, una vez que ir tan lejos, te encuentras pensando "Gee, por qué no utilizar códigos de operación reales?"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top