scalac v javac和scala v java

Ust*_*gat 5 java jvm scala jar

所以,我理解scalac编译器与javac的不同之处 - 查看生成的字节码,它们看起来不像javac会产生的 - 例如没有构造函数的类.

但运行时是否与在类路径中使用scala jar启动java有什么不同?我非常肯定,但有人可以确认scala命令只是java的一个薄包装 - 毕竟它们只是简单地使用JRE/JDK.

Jac*_*nds 12

scala命令基本上是一个脚本,用于设置类路径,然后在Java Runtime环境中运行代码.

scala脚本中的相关行显示在最后:

exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.emacs="$EMACS"  scala.tools.nsc.MainGenericRunner  "$@"
Run Code Online (Sandbox Code Playgroud)

基本上,这开始java运行MainGenericRunner. MainGenericRunner然后检查你是否告诉你scala运行一个Scala类.如果是这样,它就开始运行了.否则,它会成为交互式解释器的主角.