В семантическое управление версиями общее правило состоит в том, чтобы увеличивать младший номер только при введении обратно совместимых функций, в противном случае вместо него следует увеличить старший номер. тот же подход , но с другой арифметикой, используется libtool .
У меня есть вопрос относительно того, что считается обратно совместимым изменением, а что нет.
Представьте, что я написал библиотеку, а открытый заголовок этой библиотеки содержит typedef
типа данных с именем foo
.В версии 1.0.0 это typedef
выглядит так:
typedef struct foo_t {
int x;
int y;
} foo;
Затем я решаю изменить тип данных, и в следующей версии это будет выглядеть так:
typedef struct foo_t {
int x;
int y;
int z;
} foo;
Я добавил только одно поле в структуру foo_t
.Казалось бы, это обратно совместимое изменение, однако вышеприведенная структура теперь является de facto другой структурой.Я не вводил новую функцию и оставлял все остальное нетронутым, но вместо этого я изменил то, что уже было там.
Тип данных выше обычно используется для обмена данными с функциями библиотеки, однакопользователь мог использовать его в других целях.Если пользователь написал программу с использованием версии 1.0.0, а последнее изменение представляет собой обратно совместимое изменение, программа пользователя должна также скомпилироваться с этой новой версией.
Как будет называться эта новая версия, 1.1.0или 2.0.0?