tesoro rudy mío musica guillermo dávila descargar deriva davila cuando barco amor acaba scala read-eval-print-loop

rudy - ¿Qué sucede realmente detrás del tiempo de ejecución/REPL de Scala cuando se ejecuta un programa ''.scala''?



musica de guillermo davila (1)

Cuando ejecuto algo como lo siguiente desde la línea de comandos, ¿qué sucede realmente?

> scala hello.scala

¿Hay un hello.class generado, ejecutado y luego descartado? ¿O Scala se comporta de alguna manera como un intérprete en este caso? Solo estoy pensando que, por supuesto, no puedo hacer lo mismo para Java:

> java hello.java


Sí, hay un hello.class generado. El compilador ajustará su código dentro de un objeto Main , lo compilará y luego ejecutará Main.main , dado hello.scala de

println(args.mkString) println(argv.mkString)

Si ejecuta con la opción -Xprint:parser : scala -Xprint:parser hello.scala foo bar verá cómo se reescribe el código:

package <empty> { object Main extends scala.ScalaObject { def <init>() = { super.<init>(); () }; def main(argv: Array[String]): scala.Unit = { val args = argv; { final class $anon extends scala.AnyRef { def <init>() = { super.<init>(); () }; println(args.mkString); println(argv.mkString) }; new $anon() } } } }

Este código luego se compila (creo que en un sistema de archivos de memoria, pero no estoy seguro) y se ejecuta. En cuanto a ScriptRunner , veo que se crea un directorio temporal en la carpeta temporal predeterminada. Por ejemplo, mirando mi sistema, veo un montón de carpetas %TEMP%/scalascript* .

Tenga en cuenta que incluso en el intérprete, el código no se interpreta. Ver Scala: ¿Existe una clase predeterminada si no se define ninguna clase? Para obtener más información (en realidad se está reescribiendo, compilando y evaluando).