2017-10-03 1 views

Antwort

4

Der kompilierte Bytecode ist sprachunabhängig, aber der Code in diesem Bytecode kann natürlich auch Bibliotheken aufrufen, einschließlich der Scala-Standardbibliothek. Der Compiler hat möglicherweise auch Aufrufe in die Scala-Laufzeit generiert.

Die Scala-Laufzeit kann sich zwischen den Versionen ändern, zum Beispiel hat sich die Darstellung von Lambdas in 2.12 komplett geändert. Ein für Scala 2.12 kompiliertes Programm funktioniert nicht mit einer Scala 2.11-Laufzeit.

Während also JVM-Bytecode sprachunabhängig ist, benötigen Sie immer noch die passende Laufzeit.

Beachten Sie, dass dies nicht von jeder anderen Sprache unterscheidet. Wenn Sie C mit nativem Code kompilieren, können Sie Ihren Code immer noch nicht ausführen, es sei denn, Sie verfügen über die richtige C-Laufzeitumgebung.

+0

Also in diesem Fall bezeichnet Scala nicht die Sprache, sondern die entsprechende Laufzeit .... –

+0

Viele Funktionen, die Teil der Sprache in anderen Sprachen sind, sind Teil der Bibliothek in Scala, so dass die Grenzen verschwommen sind. Im Allgemeinen funktioniert fast keine Implementierung in der Sprache * ohne irgendeine Form von Laufzeitunterstützungsbibliothek. Sie können Java nicht ohne Garbage Collector, Dynamic Linker und JRE verwenden. –

+0

Meine Verwirrung war verwirrt, dass ich dachte, dass Scala als Major.Minor.Revision versioniert wird, aber in Wirklichkeit ist es Epoch.Major.Minor. –

3

SBT unterstützt building the same project with multiple Scala versions (und produziert dann separate Artefakte für sie usw.). Diese Dateien befinden sich natürlich im selben Pfad wie ihr Zielverzeichnis (da dieser Pfad vom vollständigen Klassennamen bestimmt wird). Daher benötigen verschiedene Scala-Versionen unterschiedliche Zielverzeichnisse, um Konflikte zu vermeiden.

Verwandte Themen