scalacvjavac和scalavjava

scalacvjavac和scalavjava,java,scala,jar,jvm,Java,Scala,Jar,Jvm,因此,我理解scalac编译器与javac的不同之处——从生成的字节码来看,它们与javac生成的字节码完全不同——例如,一个没有构造函数的类 但是运行时与在类路径中使用scala JAR启动java有什么不同吗?我非常确定,但有人能确认scala命令只是java的一个薄包装器吗?毕竟,他们只是启动了一个JRE/JDK。scala(无论如何,在linux上)是一个脚本。通过键入more`which scala` 您基本上是对的,它基本上设置了一个环境,然后运行java。scala命令基本上是一个

因此,我理解scalac编译器与javac的不同之处——从生成的字节码来看,它们与javac生成的字节码完全不同——例如,一个没有构造函数的类

但是运行时与在类路径中使用scala JAR启动java有什么不同吗?我非常确定,但有人能确认scala命令只是java的一个薄包装器吗?毕竟,他们只是启动了一个JRE/JDK。

scala(无论如何,在linux上)是一个脚本。通过键入
more
`
which scala
`


您基本上是对的,它基本上设置了一个环境,然后运行java。

scala命令基本上是一个脚本,它设置了类路径,然后在java运行时环境中运行代码

scala
脚本中的相关行出现在末尾:

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

基本上,这将启动
java
运行
maingerirunner
MainGenericRunner
然后检查是否已通知
scala
运行一个scala类。如果是这样,它将开始运行该命令。否则,它会启动交互式口译员。

是;您可以通过直接从
java
运行scala应用程序来确认这一点,但要在类路径上使用
scala library.jar
。它可以工作-在scala可执行文件中确实没有魔法。这就是我运行所有scala应用程序的方式。

这确实有点让人困惑,
java
应该正确地被称为
jvm
,因为它将运行编译成java字节码的任何代码,不管是从哪种语言来的。反之亦然:如果
java
命令不会运行代码,那么其他程序就不会运行代码(除了它包含JVM的自定义实现)。我认为只要我有一个混合模式项目,我就会坚持在类路径中使用带有scala JAR的“java”。谢谢。是否有指向您添加的代码行的github链接?