Scala:版本之间的二进制不兼容性

Moh*_*ana 20 scala binary-compatibility

为什么Scala二进制文件在不同版本之间不兼容?

Eri*_*cht 21

它与traits的编译方式有关,因为traits有点像接口,但它们可以包含实现.这使得它非常容易进行不会破坏源兼容性但破坏二进制兼容性的更改,因为当您将一个新方法与实现一起添加到特征时,您必须重新编译实现该特征的所有内容,以便它们将取消该实施.可能还有其他问题,但我认为它们大多数都是沿着同样的路线.

  • 这只是部分正确.实际上,JVM实际上是*松散的链接.这就是JDBC 2.0驱动程序与JDBC 3.0驱动程序二进制兼容的方式,其中接口具有*许多*更多方法.Scala也是如此.如果在从未在程序中调用的特征中添加方法,则它与二进制兼容.val/var以及IIRC也是如此. (6认同)

Dan*_*ral 9

缺乏JVM支持Scala特定的功能,例如提到的特性,以及它正在积极发展的事实.


tod*_*ted 5

如果您想了解导致问题的特定语言问题,请直接从Odersky获取此背景:

http://www.scala-lang.org/node/9346

如果您是该问题的新手,并希望了解这可能对应用程序产生的影响,那么值得一读David Pollack的这篇文章:

http://lift.la/scalas-version-fragility-make-the-enterprise