2012-01-06 24 views
5

Quindi, capisco come il compilatore scalac sia diverso da javac - guardando i bytecode prodotti, non assomigliavano a ciò che avrebbe prodotto javac - ad es. una classe senza un costruttore.scalac v javac e scala v java

Ma il tempo di esecuzione è diverso dall'avvio di java con scala jars nel classpath? Sono molto sicuro, ma qualcuno può confermare che il comando scala è solo un involucro sottile attorno a java - dopotutto, semplicemente rendono un JRE/JDK.

risposta

12

Il comando scala è fondamentalmente uno script che imposta il classpath e quindi esegue il codice nell'ambiente Java Runtime.

la relativa riga in script scala appare alla fine:

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

Fondamentalmente, questo inizia java esecuzione MainGenericRunner. MainGenericRunner poi controlla se hai detto a scala di eseguire una delle tue classi di Scala. Se è così, inizia a farlo. Altrimenti, visualizza l'interprete interattivo.

+0

Penso che finché avrò un progetto in modalità mista, mi limiterò a usare "java" con scala jars nel classpath. Grazie. –

4

Scala (su linux, comunque) è uno script. I contenuti possono essere visti digitando more ` which scala `

Tu sei lo più a destra, si stabilisce fondamentalmente di un ambiente e quindi esegue Java.

+0

Questo è davvero un po 'confuso, 'java' dovrebbe essere correttamente chiamato' jvm' dato che eseguirà qualsiasi codice compilato in codice byte java, indipendentemente da quale lingua. Il contrario è anche vero: se il comando 'java' non eseguirà il codice, quindi nessun altro programma (eccetto che contiene un'implementazione personalizzata della JVM). – Ingo

1

Sì; puoi banalmente confermarlo eseguendo la tua scala diretta direttamente da java, ma con il scala-library.jar sul classpath. Funziona - c'è davvero senza magia in esecuzione nell'eseguibile scala. Questo è il modo in cui eseguo tutte le mie applicazioni su scala.