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

时间:2010-01-12 23:32:04

标签: scala binary-compatibility

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

6 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:9)

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

答案 2 :(得分:5)

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

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

如果您对该问题不熟悉并想了解这可能对应用程序产生的影响,那么值得一起阅读David Pollack的这篇文章:

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

答案 3 :(得分:2)

它仍然相对年轻,正在积极发展。

新版本中有一些令人焦躁的等待,有助于解决很多问题,但是不可能使它们向后兼容。

由于Sun对更新有一定的限制,因此Java的变化相当缓慢,并且通常会尝试向后兼容到最终。有时这阻碍了进步,但大公司喜欢稳定的语言。

另一方面,斯卡拉掌握在一小群学者手中,而且尚未在行业中广泛使用,因此他们拥有(或采取)更多自由的变革。

答案 4 :(得分:2)

我已在 japi-compliance-checker 1.6 中实施了对Scala的支持,并对所有Scala版本的向后兼容性进行了分析(包括二进制和源兼容性) )。

现在您可以查看详细信息中的重大更改。该报告可在此处获取:http://abi-laboratory.pro/java/tracker/timeline/scala/

报告每隔一天更新一次,因此您可以监控最近版本的Scala中的更改。

enter image description here

答案 5 :(得分:0)

嗯,不。直截了当地了解事实。 从2.7.2.3b1开始,没有需要重新编译 - > 2.7.2.3b2,这对我来说是一个真正的解脱,因为我们拥有庞大的客户群,使用了2.7.2.3b1功能的基本遗留代码。

*警告 - 除非你在scala.collection._或scala.xml中愚蠢地使用了代码._