Scala: двоичная несовместимость между выпусками

Почему Scala двоичный файл несовместим между разными версиями?

Ответ 1

Это связано с тем, как скомпилированы черты, потому что черты вроде как интерфейсы, но могут содержать реализацию. Это делает так, что очень легко вносить изменения, которые не нарушают совместимость источников, но нарушают двоичную совместимость, потому что, когда вы добавляете новый метод к признаку вместе с реализацией, вы должны перекомпилировать все, что реализует эту черту, чтобы они выберет эту реализацию. Вероятно, есть и другие проблемы, но я думаю, что они в основном идут по одной линии.

Ответ 2

Отсутствие поддержки JVM для Scala -специфических функций, таких как упомянутые черты, и того факта, что он активно развивается.

Ответ 3

Вот об этом, прямо из Одерского, если вы хотите понять специфические проблемы языка, которые вызывают проблемы:

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

Стоит прочитать вместе с этим сообщением Дэвида Поллака, если вы новичок в этой проблеме и хотите понять, какое влияние это может оказать на приложения:

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

Ответ 4

Он все еще относительно молодой и активно развивается.

В новой версии есть некоторые изменения, которые с нетерпением ожидали и которые помогли с большим количеством проблем, но было невозможно сделать их обратно совместимыми.

Поскольку Sun является довольно ограничительным в отношении обновлений, Java изменяется довольно медленно и обычно пытается оставаться обратно совместимым с горьким концом. Иногда это мешает прогрессу, но крупные компании любят стабильный язык.

Scala, с другой стороны, находится в руках небольшой группы ученых, и она еще не широко используется в отрасли, поэтому они (или принимают) еще большую свободу с изменениями.

Ответ 5

Я реализовал поддержку Scala в japi-compliance-checker 1.6 и выполнил анализ обратной совместимости для всех версий Scala (как бинарная, так и совместимая с исходным кодом).

Итак, теперь вы можете просмотреть изменения в деталях. Отчет доступен здесь: http://abi-laboratory.pro/java/tracker/timeline/scala/

Отчет обновляется через день, поэтому вы можете отслеживать изменения в последних версиях Scala.

введите описание изображения здесь

Ответ 6

Умм, нет. Получите ваши факты прямо. Не было необходимости перекомпиляции * при переходе от 2.7.2.3b1 → 2.7.2.3b2, что было для меня реальным облегчением из-за большой клиентской базы, которую мы имели с укоренившимся устаревшим кодом с использованием возможностей 2.7.2.3b1.

* Предостережение - если вы не глупо использовали код в scala.collection._ или scala.xml._