Why is Scala binary incompatible between different releases?
6 回答
它与特质的编译方式有关,因为特质有点像接口,但它们可以包含实现。这使得在不破坏源代码兼容性但破坏二进制兼容性的情况下进行更改非常容易,因为当您将新方法与实现一起添加到特征时,您必须重新编译实现该特征的所有内容,以便它们将拾取该实施。可能还有其他问题,但我认为它们大多是相同的。
缺乏 JVM 对 Scala 特定功能的支持,例如提到的特征,以及它正在积极发展的事实。
如果您想了解导致问题的特定语言问题,以下是直接来自 Odersky 的背景:
http://www.scala-lang.org/node/9346
如果您是该问题的新手并想了解这可能对应用程序产生的影响,那么值得一读 David Pollack 的这篇文章:
我在japi-compliance-checker 1.6中实现了对 Scala 的支持,并对所有 Scala 版本的向后兼容性(二进制和源代码兼容性)进行了分析。
因此,现在您可以详细查看重大更改。该报告可在此处获得: http: //abi-laboratory.pro/java/tracker/timeline/scala/
该报告每隔一天更新一次,因此您可以监控 Scala 最新版本的变化。
它仍然相对年轻,正在积极发展。
新版本中有一些令人焦急地等待的更改,这有助于解决很多问题,但不可能使它们向后兼容。
由于 Sun 对更新有一定的限制,Java 的变化相当缓慢,并且通常会尽量保持向后兼容直到痛苦的结局。有时这会阻碍进步,但大公司喜欢稳定的语言。
另一方面,Scala 掌握在一小群学者的手中,并且(尚未)在行业中广泛使用,因此他们拥有(或获得)更多的变化自由。
嗯,没有。把你的事实弄清楚。从 2.7.2.3b1 -> 2.7.2.3b2 开始时不需要重新编译*,这对我来说是一种真正的解脱,因为我们拥有使用 2.7.2.3b1 功能的根深蒂固的遗留代码的庞大客户群。
*警告 - 除非你在 scala.collection._ 或 scala.xml._ 中愚蠢地使用了代码