2012-01-06 18 views
5

Por lo tanto, entiendo cómo el compilador scalac es diferente de javac - mirando los bytecodes producidos, no se parecían en nada a lo que javac produciría - p. una clase sin un constructorscalac v javac y scala v java

¿Pero el tiempo de ejecución es diferente de iniciar java con scala jar en classpath? Estoy muy seguro, pero ¿alguien puede confirmar que el comando scala es solo una envoltura delgada alrededor de Java? Después de todo, simplemente lanzan un JRE/JDK.

Respuesta

12

El comando scala es básicamente un script que configura el classpath y luego ejecuta el código en el entorno de Java Runtime.

la línea relevante en el guión scala aparece al final:

exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.emacs="$EMACS" scala.tools.nsc.MainGenericRunner "[email protected]" 

Básicamente, este comienza java corriendo MainGenericRunner. MainGenericRunner luego verifica si le has dicho al scala que ejecutes una de tus clases de Scala. Si es así, comienza a correr eso. De lo contrario, aparece el intérprete interactivo.

+0

Creo que siempre que tenga un proyecto de modo mixto, me limitaré a usar "java" con scala jar en classpath. Gracias. –

4

Scala (en Linux, de todos modos) es una secuencia de comandos. Los contenidos pueden ser vistos escribiendo more ` which scala `

Usted es sobre todo la derecha, que básicamente establece un ambiente y luego se ejecuta Java.

+0

Esto de hecho confunde un poco, 'java' debe llamarse apropiadamente' jvm' ya que ejecutará cualquier código compilado a código de byte de Java, sin importar de qué idioma. Lo contrario también es cierto: si el comando 'java' no ejecutará el código, entonces ningún otro programa (excepto que contiene una implementación personalizada de la JVM). – Ingo

1

Sí; puede confirmarlo trivialmente ejecutando su aplicación scala directamente desde java, pero con scala-library.jar en classpath. Funciona - realmente hay sin magia pasando en el ejecutable scala. Así es como ejecuto todas mis aplicaciones de scala.