Каковы преимущества и недостатки объявления методов версии пакета в Perl?

Модули классны, особенно когда они поставляются с версией. Вы можете определить минимальную версию модуля, чтобы предотвратить утечку методов, которые вы хотите использовать. Но с каждой стороны света появляется темная сторона, которая означает Perl TIMTOWTDI.

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

Пожалуйста, не стесняйтесь комментировать больше способов определения версии, если вы обнаружите утечку;)

Пожалуйста, уважайте:

  • странное требование/использование модуля, который может вызвать проблемы с обнаружением версии модуля (компиляция и время выполнения)
  • Разбор PAUSE/CPAN (и другие общие службы)
  • читаемость для конечных пользователей
  • поддержка для разработчиков

Каковы преимущества и недостатки объявления методов версии пакета в Perl?

Способ 1

package PackageName;
BEGIN {
  use version 0.77; our $VERSION = version->new('v0.0_1');
}

Способ 2

package PackageName;
BEGIN {
  our $VERSION = 0.000_01;
}

Способ 3

package PackageName;
BEGIN {
  our $VERSION = 0.0.1;
}

Метод 4

package PackageName;
use version 0.77; our $VERSION = version->new('v0.0_1');

Метод 5

package PackageName;
our $VERSION = 0.000_01;

Метод 6

package PackageName;
our $VERSION = 0.0.1;

Ответы

Ответ 1

Правильный ответ:

package My::Thing;
our $VERSION = "0.001";

Версия всегда должна быть десятичным числом, используя трехзначное соглашение о расторжении. Вышеупомянутая версия будет сокращена до версии 0.1.0, чтобы изменить 3-й шаг в этой сокращенной форме, которую вы бы определили для своей версии следующим образом: 0.001001, который будет сокращенно v0.1.1.

Не помещайте символы подчеркивания в свой номер версии, чтобы отмечать выпуски dev. С тех пор инструментальная привязка Perl приняла механизм -TRIAL, примером которого является Dist:: Zilla 4.101800-TRIAL. Преимущество заключается в том, что номера версий вашего кода не нуждаются в каких-либо изменениях. Только имя файла выпуска и метафайлы изменены из нормы, добавив -TRIAL.

Edit:

После прочтения daxim ответа и размышления немного, я должен согласиться с тем, чтобы поместить номер версии в кавычки. Он никоим образом не изменяет функциональность, но уменьшает вероятность ошибки 0.00101 для v0.1.1, когда она фактически v0.1.10 и более четко читается как 0.001010.

Ответ 2

Лучшие практики согласно мне после скрытых лет в # toolchain и различные связанные с модулем списки рассылки.

примеры

Для модулей:

package Foo::Bar 2.001; # 2nd version of revision 2
package Fnord 2.420;    # 421st version of revision 2

В противном случае:

our $VERSION = '2.001'; # 2nd version of revision 2
our $VERSION = '2.420'; # 421st version of revision 2

Обоснование

Каждый модуль должен иметь версию, иначе проблематично точно определять зависимость при распределении распределения. Он лучше всего работает, когда версия распространения и каждая версия модуля равны и увеличены в блокировке. Чтобы сделать это легко, используйте perl-reversion, который является частью Perl:: Версия. Увеличивайте версию каждый раз, когда вам нужно зависеть от новых функций или измененного API от кода, внешнего по отношению к дистрибутиву.

При использовании объявления package версия является рациональным числом. Если объявление package не подходит, объявите волшебную переменную $VERSION, а затем версия - это строка.

В любом случае версия состоит из номера версии, литеральной точки в качестве разделителя и номера версии, всего в форме y.xxx. y - натуральное число, xxx - это ровно три нулевых числа. Строковое цитирование предотвращает исчезновение конечных нулей. Заполнение до того же количества цифр предотвращает путаницу в отношении 1.10 < 1.9. Наличие ровно одного разделителя предотвращает путаницу в отношении 5.10.1 == 5.010001.

Не используйте модуль version для объявления версий. Использование простых строк предотвращает этот уродливый префикс v в имени рассылки. Однако, используя модуль для обработки версий, например, для их сравнения, является хорошей идеей.

Не используйте v -strings. Они плохо разбираются.

Не используйте символы подчеркивания. Использование подчеркивания требует eval версии, чтобы превратить ее в число. Если вы хотите пометить дистрибутив как кандидат на выпуск для индексатора PAUSE, добавить слово TRIAL в имя распространения.

Доступ к версии должен осуществляться только с помощью универсального метода класса VERSION.

perl -mLWP::Simple -E'say LWP::Simple->VERSION'

соответствие

Эта схема полностью совместима с рекомендациями, изложенными в

Это несовместимо с semver.

Ответ 3

4. Good. Using version will have fewer corner cases.
5. Ok.
6. (Short for v0.0.1) Let avoid v-strings, please?

BEGIN делает разницу (заполняет $VERSION до скомпилирования следующих строк), но эта разница бесполезна.