【发布时间】:2019-07-31 22:52:14
【问题描述】:
在semantic versioning 中,一般规则是仅在引入向后兼容的功能时才增加次要编号,否则必须增加主要编号。 libtool 使用same approach,但算法不同。
我有一个问题,关于什么被认为是向后兼容的变化,什么不是。
假设我编写了一个库,该库的公共头文件包含一个名为foo 的数据类型的typedef。在 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?
编辑
您可以阅读此讨论的进一步发展here。
【问题讨论】:
标签: c struct semantic-versioning