Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2.1. Нумерация версий ПО

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

  • статическое связывание, которое осуществляется на этапе компиляции;
  • динамическое связывание, происходящее на этапе выполнения программы.

Как программа, так и подключаемые к ней модули, обычно существуют в нескольких версиях.

Существуют различные схемы нумерации версий:

  • последовательные значения;
  • дата выпуска;
  • хеш-сумма содержимого;
  • различные экзотические схемы (например, последовательные цифры числа \(\pi\) или \(e\)).

Проблема ада зависимостей (dependency hell) состоит в наличии конфликтных ситуаций между зависимостями различных модулей. Например, в системном каталоге библиотек может быть только одна версия библиотеки \(X\), при этом одна программа требует \(X\) в версии \(A\), а другая – в несовместимой с \(A\) версии \(B\).

Для управления зависимостями между модулями необходима строгая и единая система нумерации версий, определяющая совместимые и несовместимые сочетания модулей.

2.1.1. Семантическая нумерация версий

В спецификации SemVer (semantic versioning) версия состоит из следующих основных компонентов (см. рис. 13):

  1. мажорная часть, означающая несовместимые с предыдущими версиями изменения;
  2. минорная часть, означающая, добавление обратно совместимой функциональности;
  3. патч, к которому относятся обратно совместимые исправления ошибок.
Рисунок 13. Формат версии по спецификации SemVer

Сравнение двух версий осуществляется слева направо, до определения первого расхождения. Таким образом устанавливается порядок между версиями, а также могут быть введены интервалы версий.

С помощью символа ^ указываются совместимый интервал версий. Например ~1.2.3 означает >=1.2.3 и <2.0.0. Символ ~ определяет близкие друг к другу версии. Например ~1.2.3 означает >=1.2.3 и <1.3.0.