Каковы преимущества и недостатки объявления методов версии пакета в 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
до скомпилирования следующих строк), но эта разница бесполезна.