Версионирование библиотек в Scala
Ещё полгода назад в sbt появилась возможность прописывать схему версионирования зависимостей. Это помогает системе сборке сигнализировать о бинарной несовместимости зная правила версионирования конкретной библиотеки, то есть с меньшим количеством ложных срабатываний. Подробнее об этом написано здесь.
Для меня стало открытием, что версионирование библиотек в скала-экосистеме —
это вовсе не кривой semver, а другие схемы со
своей формализацией. Так, стандартная библиотека версионируется по
PVP: epoch.major.minor
. В отличие от semver в нём
не надо увеличивать первую цифру при каждом ломающем изменении: её можно
инкрементить на усмотрение автора о важности обновления.
А другие библиотеки, например, проекты Typelevel, используют early-semver. В нём первая цифра увеличивается только при изменениях, ломающих бинарную совместимость. Если же major=0, то бинарную совместимость можно ломать при каждом минорном релизе. Собственно поэтому версия circe до сих пор начинается с нуля :) И рекомендацией для библиотек является как раз использование early-semver.