Версионность библиотеки
От: FrozenHeart  
Дата: 05.06.14 10:34
Оценка:
Приветствую.

Предположим, Вы разрабатываете некоторую библиотеку или фреймворк. Каким образом Вы организуете версионность для пользователя, чтобы он мог пользоваться этим знанием для каких-то своих целей (вывод в лог, оборачивание version-specific участков кода, etc)? Да, хотелось бы использовать схему "%major%.%minor%.%patch%", но с удовольствием выслушаю Ваши идеи и предложения.

Казалось бы, при таком подходе наилучшим решением можно считать использование двух констант -- для числового и строкового представлений текущей версии. Числовое можно будет использовать для оборачивания version-specific участков кода (например, при помощи #ifdef-ов), а строковое может быть более читаемым (может пригодиться, например, для вывода в лог).

А как при таком подходе поддерживать числовые версии до 1.0.0 (например, 0.0.1)?

#define LIB_VERSION 1


Так, что ли? Или есть какие-то идеи получше?
avalon/1.0.434
Re: Версионность библиотеки
От: night beast СССР  
Дата: 05.06.14 11:22
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>Приветствую.


FH>Так, что ли? Или есть какие-то идеи получше?


чем
MAJOR_VERSION
MINOR_VERSION
SUBMINOR_VERSION
не нравится?
Re: Версионность библиотеки
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 05.06.14 11:25
Оценка: 20 (1) +1
Здравствуйте, FrozenHeart, Вы писали:

FH>Так, что ли? Или есть какие-то идеи получше?


http://semver.org/
HgLab: Mercurial Server and Repository Management for Windows
Re: Версионность библиотеки
От: Stanislav V. Zudin Россия  
Дата: 05.06.14 11:34
Оценка: 5 (1)
Здравствуйте, FrozenHeart, Вы писали:

FH>Предположим, Вы разрабатываете некоторую библиотеку или фреймворк. Каким образом Вы организуете версионность для пользователя, чтобы он мог пользоваться этим знанием для каких-то своих целей (вывод в лог, оборачивание version-specific участков кода, etc)? Да, хотелось бы использовать схему "%major%.%minor%.%patch%", но с удовольствием выслушаю Ваши идеи и предложения.


FH>Казалось бы, при таком подходе наилучшим решением можно считать использование двух констант -- для числового и строкового представлений текущей версии. Числовое можно будет использовать для оборачивания version-specific участков кода (например, при помощи #ifdef-ов), а строковое может быть более читаемым (может пригодиться, например, для вывода в лог).


FH>
#define LIB_VERSION 1


FH>Так, что ли? Или есть какие-то идеи получше?


IBM WebsphereMQ:

 ...
 #define MQCMDL_LEVEL_700               700 <-- версия 7.0.0
 #define MQCMDL_LEVEL_701               701 <-- версия 7.0.1
 #define MQCMDL_LEVEL_710               710 <-- версия 7.1.0
 #define MQCMDL_LEVEL_711               711 <-- версия 7.1.1
 #define MQCMDL_LEVEL_750               750 <-- версия 7.5.0
 #define MQCMDL_LEVEL_800               800 <-- версия 8.0.0
 #define MQCMDL_CURRENT_LEVEL           800


FH>А как при таком подходе поддерживать числовые версии до 1.0.0 (например, 0.0.1)?


Для проверки в коде я бы сделал что-то типа

#define LIB_VERSION = 1000000 * MAJOR_VERSION + 10000 * MINOR_VERSION + SUBMINOR_VERSION
(4 цифры под номер патча, 2 цифры под %minor%, все, что осталось — под %major%).
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Версионность библиотеки
От: FrozenHeart  
Дата: 05.06.14 13:11
Оценка:
Н> http://semver.org/

Спасибо, почитаю.
avalon/1.0.434
Re[2]: Версионность библиотеки
От: FrozenHeart  
Дата: 05.06.14 13:11
Оценка:
n> чем
n> MAJOR_VERSION
n> MINOR_VERSION
n> SUBMINOR_VERSION
n> не нравится?

Неудобно же в #ifdef использовать, по-моему, если надо, например, выделить код только для версий 1.0.5 — 1.1.0.
avalon/1.0.434
Re[2]: Версионность библиотеки
От: FrozenHeart  
Дата: 05.06.14 13:12
Оценка:
SVZ> IBM WebsphereMQ:

SVZ>
SVZ>  ...
SVZ>  #define MQCMDL_LEVEL_700               700 <-- версия 7.0.0
SVZ>  #define MQCMDL_LEVEL_701               701 <-- версия 7.0.1
SVZ>  #define MQCMDL_LEVEL_710               710 <-- версия 7.1.0
SVZ>  #define MQCMDL_LEVEL_711               711 <-- версия 7.1.1
SVZ>  #define MQCMDL_LEVEL_750               750 <-- версия 7.5.0
SVZ>  #define MQCMDL_LEVEL_800               800 <-- версия 8.0.0
SVZ>  #define MQCMDL_CURRENT_LEVEL           800
SVZ>


Это-то да, я так примерно и предполагал делать. Но как быть с версиями до 1.0.0?

#define LIB_VERSION 1


Так, что ли?
avalon/1.0.434
Re[3]: Версионность библиотеки
От: night beast СССР  
Дата: 05.06.14 13:14
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

n>> чем

n>> MAJOR_VERSION
n>> MINOR_VERSION
n>> SUBMINOR_VERSION
n>> не нравится?

FH>Неудобно же в #ifdef использовать, по-моему, если надо, например, выделить код только для версий 1.0.5 — 1.1.0.


так может это и хорошо? чтобы не злоупотреблять.
Re[3]: Версионность библиотеки
От: Stanislav V. Zudin Россия  
Дата: 05.06.14 13:17
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

SVZ>> IBM WebsphereMQ:


SVZ>>
SVZ>>  ...
SVZ>>  #define MQCMDL_LEVEL_700               700 <-- версия 7.0.0
SVZ>>  #define MQCMDL_LEVEL_701               701 <-- версия 7.0.1
SVZ>>  #define MQCMDL_LEVEL_710               710 <-- версия 7.1.0
SVZ>>  #define MQCMDL_LEVEL_711               711 <-- версия 7.1.1
SVZ>>  #define MQCMDL_LEVEL_750               750 <-- версия 7.5.0
SVZ>>  #define MQCMDL_LEVEL_800               800 <-- версия 8.0.0
SVZ>>  #define MQCMDL_CURRENT_LEVEL           800
SVZ>>


FH>Это-то да, я так примерно и предполагал делать. Но как быть с версиями до 1.0.0?


FH>
#define LIB_VERSION 1


FH>Так, что ли?


Если использовать три разряда, как в WMQ, то да.
Скажем, версия 0.9.9 --> #define LIB_VERSION 99
_____________________
С уважением,
Stanislav V. Zudin
Re: Версионность библиотеки
От: BulatZiganshin  
Дата: 05.06.14 17:30
Оценка: 1 (1) +1
Здравствуйте, FrozenHeart, Вы писали:

#define major 0
#define minor 0
#define sub 1
#define ver(a,b,c)  a*100+b*10+с
#define myver ver(major,minor,sub)

#if myver>ver(0,0,1)
Люди, я люблю вас! Будьте бдительны!!!
Re: Версионность библиотеки
От: Sinix  
Дата: 05.06.14 18:27
Оценка: 1 (1) +1
Здравствуйте, FrozenHeart, Вы писали:

FH>Так, что ли? Или есть какие-то идеи получше?


Ещё один голос за http://semver.org/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.