这实际上是三个问题,但对我来说,它们是紧密相连的。
scala-lang.jar
连同我自己的代码? binary compatibility
来自?这个问题的答案通常听起来像:Different Scala compilers produce different bytecode.
但这对我来说解释不多。这是否意味着字节码的“接口(interface)”发生了变化?例如,更改包含伴随对象实例的字段的名称。如果是,那么为什么没有向后兼容性?是否可以将元数据添加到字节码? Scala 编译器可以使用它来改变其行为/期望并为各种版本发出不同的字节码。
最佳答案
什么是 Scala 运行时?
是的,Scala 运行时运行在 JVM 之上,它所需要的只是支持 scala-lang.jar
库和适当版本的“普通”JVM。 Scala 代码被编译为 JVM 字节码。您可以了解更多关于 Scala 编译器的功能 here或者你可以检查编译phases .
是的,当您想在 JVM 上运行 Scala 代码时,您应该始终提供 scala-lang.jar
,但 JVM 并不是运行 Scala 代码所必需的。有像 Scala native 这样的项目允许您在没有 JVM 或 Scala.js 的平台上本地运行 Scala 代码允许您在 JavaScript 引擎之上运行它。
这种二进制(不)兼容性从何而来?
这种(非)兼容性来自(不仅是)Scala 标准库的 ABI 的变化(参见 ABI versioning)。已经有一个改进向后二进制兼容性的提议。查看详情here
关于scala - 什么是 Scala 运行时、二进制兼容性以及如何部署 Scala 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685413/