Как определить версию пакета, которая требуется в вашем пакете?

9

У меня сейчас есть пара пакетов, и в разделе PackageRequires я хотел бы поместить в него все пакеты, которые мне нужны, но кажется, что для этого нужны имя и версия. Где вы определяете номер версии? Например, у меня есть (cl-lib "0.5"), но какой лучший способ определить минимальную версию, которую я могу использовать? Я вижу текущую версию, но как лучше определить минимальное значение? Кроме того, некоторые требуемые пакеты не имеют версии, указанной в их файле. В этих случаях, что рекомендуется?

user78810
источник

Ответы:

7

Используйте версию, для которой вы написали пакет. Это самая безопасная базовая линия, которую вы можете получить, если только вы явно не проверите каждую функцию, которую используете. С этого момента вы можете только надеяться, что разработчики этого пакета никогда не нарушат обратную совместимость ...

Что касается пакетов, у которых даже нет номера версии, я бы их вообще не использовал. Если сопровождающий даже не заботится о правильном управлении версиями, как вы можете доверять им что-нибудь еще?

lunaryorn
источник
1

Моя рекомендация:

  • Начните с функций, переменных, макросов и т. Д., Которые фактически использует ваш код. Если он использует что-то, что было представлено в данной версии Emacs или в исходной библиотеке функции, то начните с этого как своей минимальной версии.

  • Версия функции, которую вы используете, может не соответствовать оригинальной версии функции, когда она была впервые представлена. Возможно, было добавлено больше аргументов. Проверьте, имеет ли это значение для вашего конкретного использования. Если нет, то вы можете игнорировать это. Если да, то найдите самую старую исходную версию, которая поддерживает то, что ожидает ваш код.

  • Тестовое задание. Получите копию любой версии библиотеки, которую, как вы утверждаете, поддерживает как минимум, и попробуйте ее.

  • Иногда в функцию вносятся незначительные изменения, и вашему коду принципиально не требуется более новая версия. Но может потребоваться адаптация для поддержки более чем одной версии (если вы этого хотите). Вам может потребоваться проверить, существует ли функция ( fboundp) или имеет правильную последовательность подписи / вызова. В последнем случае это subr-arityможет помочь со встроенными модулями, но вам может понадобиться использовать condition-caseдля функций Lisp (вызов с расширенным числом аргументов и обработка ошибки неправильного числа аргументов путем вызова с меньшим числом аргументов).

Нарисовалась
источник