Scala: двоичная несовместимость между выпусками
Почему бинарная версия Scala несовместима между различными выпусками?
6 ответов
Это связано с тем, как черты компилируются, потому что черты похожи на интерфейсы, но могут содержать реализацию. Это делает ОЧЕНЬ легко вносить изменения, которые не нарушают совместимость с исходным кодом, но нарушают двоичную совместимость, потому что, когда вы добавляете новый метод к признаку вместе с реализацией, вы должны перекомпилировать все, что реализует эту черту, чтобы они подхватит эту реализацию. Возможно, есть и другие проблемы, но я думаю, что они в основном совпадают.
Отсутствие поддержки JVM для специфических для Scala функций, таких как упомянутые особенности, и тот факт, что он активно развивается.
Вот предыстория этого, прямо из Одерского, если вы хотите понять конкретные языковые проблемы, которые вызывают проблемы:
http://www.scala-lang.org/node/9346
Стоит прочитать вместе с этим сообщением от Дэвида Поллака, если вы новичок в этой проблеме и хотите понять влияние, которое это может оказать на приложения:
Я реализовал поддержку 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._