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

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

6 ответов

Решение

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

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

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

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

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

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

Я реализовал поддержку Scala в japi-Compliance-Checker 1.6 и провел анализ обратной совместимости для всех версий 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._

Другие вопросы по тегам