-
Notifications
You must be signed in to change notification settings - Fork 22
Description
Compilation done using JDK 11.0.16. Target bytecode level is JDK 10 (54.0 as per https://javaalmanac.io/bytecode/versions/).
Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}Compilation: javac --release 10 HelloWorld.java
Output: javap -v HelloWorld:
Classfile /Users/vasil.vasilev/scratch/HelloWorld.class
Last modified Jul 26, 2022; size 427 bytes
MD5 checksum 17d024f395aebe2e6764dc846e444557
Compiled from "HelloWorld.java"
public class HelloWorld
minor version: 0
major version: 54
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #5 // HelloWorld
super_class: #6 // java/lang/Object
interfaces: 0, fields: 0, methods: 2, attributes: 1
Result: Bytecode level 54.0 (JDK 10), as set by --release 10. Works as expected.
Scala 2.13.8
Source:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}Compilation: scalac --release 10 HelloWorld.scala
Output: javap -v HelloWorld
Classfile /Users/vasil.vasilev/scratch/HelloWorld.class
Last modified Jul 26, 2022; size 706 bytes
MD5 checksum a8ec501d0aebe643501d2a1cc86737ae
Compiled from "HelloWorld.scala"
public final class HelloWorld
minor version: 0
major version: 52
flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: #2 // HelloWorld
super_class: #4 // java/lang/Object
interfaces: 0, fields: 0, methods: 1, attributes: 3
Result: Bytecode level 52.0 (JDK 8), as set by --release 10. Not working as expected.
Scala 2.13.8 with -target:10
Source:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}Compilation: scalac --release 10 -target:10 HelloWorld.scala
Output: javap -v HelloWorld
Classfile /Users/vasil.vasilev/scratch/HelloWorld.class
Last modified Jul 26, 2022; size 706 bytes
MD5 checksum 2cca1e5977d802a020635061d2a4698f
Compiled from "HelloWorld.scala"
public final class HelloWorld
minor version: 0
major version: 54
flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: #2 // HelloWorld
super_class: #4 // java/lang/Object
interfaces: 0, fields: 0, methods: 1, attributes: 3
Result: Bytecode level 54.0 (JDK 10), as set by --release 10 -target:10. Works as expected.
Scala 3.1.3
Source:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}Compilation: scalac --release 10 HelloWorld.scala
Output: javap -v HelloWorld
Classfile /Users/vasil.vasilev/scratch/HelloWorld.class
Last modified Jul 26, 2022; size 302 bytes
MD5 checksum 3c1fd2e887d87c7040b4351c6eda45c8
Compiled from "HelloWorld.scala"
public final class HelloWorld
minor version: 0
major version: 54
flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: #2 // HelloWorld
super_class: #4 // java/lang/Object
interfaces: 0, fields: 0, methods: 1, attributes: 3
Result: Bytecode level 54.0 (JDK 10), as set by --release 10 -target:10. Works as expected.
Scala 2.12.16
Source:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}Compilation: scalac -release 10 HelloWorld.scala
Output: javap -v HelloWorld
Classfile /Users/vasil.vasilev/scratch/HelloWorld.class
Last modified Jul 26, 2022; size 645 bytes
MD5 checksum f20ce23243e3c27a4aa64c2727e3f823
Compiled from "HelloWorld.scala"
public final class HelloWorld
minor version: 0
major version: 52
flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: #2 // HelloWorld
super_class: #4 // java/lang/Object
interfaces: 0, fields: 0, methods: 1, attributes: 3
Result: Bytecode level 52.0 (JDK 8), as set by -release 10. Not working as expected.
Scala 2.12.16 with -target:10
Source:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}Compilation: scalac -release 10 -target:10 HelloWorld.scala
Output: javap -v HelloWorld
Classfile /Users/vasil.vasilev/scratch/HelloWorld.class
Last modified Jul 26, 2022; size 645 bytes
MD5 checksum 0686cefff7da55d8c5f0a381ccee6543
Compiled from "HelloWorld.scala"
public final class HelloWorld
minor version: 0
major version: 54
flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: #2 // HelloWorld
super_class: #4 // java/lang/Object
interfaces: 0, fields: 0, methods: 1, attributes: 3
Result: Bytecode level 54.0 (JDK 10), as set by -release 10 -target:10. Works as expected.
Conclusion
Scala 2, while it does respect the --release flag, it doesn't set the -target flag with it. Java does. Scala 3 does.