скалак в яваце и скала в яве - PullRequest
5 голосов
/ 06 января 2012

Итак, я понимаю, как компилятор скалака отличается от javac - глядя на созданные байт-коды, они не были похожи на то, что будет производить javac - например, класс без конструктора.

Но отличается ли время выполнения от запуска java с jar-файлами scala в classpath? Я очень уверен, но кто-то может подтвердить, что команда scala - это просто оболочка вокруг java - в конце концов, они просто запускают JRE / JDK.

Ответы [ 3 ]

12 голосов
/ 06 января 2012

Команда scala в основном представляет собой сценарий, который устанавливает путь к классу, а затем запускает ваш код в среде выполнения Java.

В конце появляется соответствующая строка в сценарии scala:

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

По сути, это запускает java работает MainGenericRunner.MainGenericRunner затем проверяет, сказали ли вы scala запустить один из ваших классов Scala.Если это так, он начинает работать.В противном случае запускается интерактивный переводчик.

4 голосов
/ 06 января 2012

Scala (в любом случае на linux) - это скрипт.Содержимое можно увидеть, набрав more `which scala`

Вы в основном правы, он в основном настраивает среду, а затем запускает Java.

1 голос
/ 07 января 2012

Да; Вы можете тривиально подтвердить это, запустив свое приложение scala непосредственно с java, но с scala-library.jar на пути к классам. Это работает - на самом деле никакой магии не происходит в scala исполняемом файле. Вот как я запускаю все свои приложения Scala.

...