Question

Why is Scala binary incompatible between different releases?

Was it helpful?

Solution

It has to do with the way traits are compiled, because traits are kind of like interfaces but they can contain implementation. This makes it so it is VERY easy to make changes that don't break source compatibility but break binary compatibility, because when you add a new method to a trait along with an implementation, you have to recompile everything that implements that trait so that they will pickup that implementation. There's probably other issues, too, but I think they're mostly along the same lines.

OTHER TIPS

Lack of JVM support for Scala-specific features, such as traits mentioned, and the fact that it is actively evolving.

Here's background on this, straight from Odersky, if you want to understand the specific language issues that cause problems:

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

It's worth reading in conjunction with this post from David Pollack if you are new to the issue and want to understand the impact this can have on applications:

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

It's still relatively young and undergoing active development.

There are some changes in the new release that were anxiously awaited and that help with a lot of problems, but it wasn't possible to make them backward compatible.

Because Sun is kind of restrictive about updates, Java changes rather slowly, and usually tries to remain backward compatible to the bitter end. Sometimes this stands in the way of progress, but big companies love a stable language.

Scala, on the other hand, is in the hands of a small group of academics, and it's not (yet) widely used in the industry, so they have (or take) some more freedom with changes.

I've implemented support for Scala in the japi-compliance-checker 1.6 and performed analysis of backward compatibility for all versions of Scala (both binary- and source-compatibility).

So now you can view breaking changes in details. The report is available here: http://abi-laboratory.pro/java/tracker/timeline/scala/

The report is updated every other day, so you can monitor changes in the recent versions of Scala.

enter image description here

Umm, no. Get your facts straight. There was no recompilation needed* when going from 2.7.2.3b1 -> 2.7.2.3b2, which was a real relief for me because of the large customer base we had with entrenched legacy code using 2.7.2.3b1 features.

*Caveat - unless you foolishly used code in scala.collection._ or scala.xml._

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top