traduccion - Racket Interactive vs Compiled Performance
racket traduccion (2)
Racket siempre compilará su código, independientemente de si se ejecuta de forma interactiva en el REPL o se ejecuta desde la línea de comandos. Here está la sección en la guía que lo explica. En el modo interactivo, el compilador convierte cada expresión / definición en un bytecode en la memoria y lo ejecuta. De lo contrario, los compiladores envían el código de bytes a los archivos zo.
Nota: Eli respondió al mismo tiempo que yo. Ver su respuesta para más detalles.
Si compilo o no un programa de Racket parece que no hay diferencia en el rendimiento del tiempo de ejecución.
¿Es solo la carga del archivo inicialmente lo que se mejora con la compilación? En otras palabras, ¿ejecutar racket src.rkt
hace una compilación de racket src.rkt
sobre la marcha, por lo que no veo ninguna diferencia en la compilación frente a la interactiva?
Incluso para los bucles ajustados de aritmética de enteros, donde pensé que se produciría alguna diferencia, los tiempos del perfil son equivalentes, ya sea que haya hecho un raco make
o no.
¿Me estoy perdiendo algo simple?
PS, .rkt
que puedo ejecutar la raqueta contra el archivo fuente ( .rkt
) o el archivo .zo
. ¿Utiliza la raqueta automáticamente el .zo
si se encuentra uno que corresponde al archivo .rkt
, o si el archivo .zo
debe usarse explícitamente? De cualquier manera, no hay diferencia con los números de rendimiento que estoy viendo.
Sí tienes razón.
Racket compila el código en dos etapas: primero, el código se compila en forma de código de bytes, y luego, cuando se ejecuta, se convierte en código de máquina. Cuando compila un archivo, básicamente está creando el bytecode que se guarda al volver a compilarlo más tarde. Ya que generalmente eso no es algo que tome mucho tiempo para pequeñas piezas de código, no verá ninguna diferencia notable en los tiempos de ejecución. Para un ejemplo extremo, puede eliminar todos los archivos *.zo
en el árbol de recopilación e iniciar DrRacket. Tomará mucho tiempo comenzar ya que hay una tonelada de código, pero una vez que se inicie, se ejecutará casi como siempre. . (También sería lento hacer clic en "ejecutar", ya que eso volverá a cargar y recompilará algunos archivos.) Otra preocupación por los fragmentos de código más grandes es que el proceso de compilación puede aumentar el consumo de memoria, pero eso tampoco es un problema con los fragmentos de código más pequeños. .
Consulte también el capítulo de Performace en la guía para obtener sugerencias sobre cómo mejorar el rendimiento.