Comment déterminer la version du package à exiger dans votre package?

9

J'ai maintenant quelques paquets, et dans la section PackageRequires, j'aimerais y mettre tous les paquets dont j'ai besoin, il semble qu'il nécessite le nom et la version. Où déterminez-vous le numéro de version? Par exemple, j'ai (cl-lib "0.5"), mais quelle est la meilleure façon de déterminer la version minimale que je peux utiliser? Je peux voir la version actuelle, mais quelle est la meilleure façon de déterminer la valeur minimale requise? De plus, certains packages requis n'ont pas de version spécifiée dans leur fichier. Dans ces cas, qu'est-ce qui est recommandé?

user78810
la source

Réponses:

7

Utilisez la version pour laquelle vous avez écrit le package. C'est la ligne de base la plus sûre que vous puissiez obtenir, sauf si vous vérifiez explicitement chaque fonction que vous utilisez. À partir de là, vous ne pouvez qu'espérer que les responsables de ce package ne rompent jamais silencieusement la compatibilité descendante…

Quant aux paquets qui n'ont même pas de numéro de version, je ne les utiliserais pas du tout. Si le responsable ne se soucie même pas du bon versioning, comment pouvez-vous lui faire confiance avec autre chose?

lunaryorn
la source
1

Ma recommandation:

  • Commencez avec les fonctions, variables, macros, etc. que votre code utilise réellement. S'il utilise quelque chose qui a été introduit dans une version donnée d'Emacs ou de la bibliothèque source de la fonction, commencez par cela comme version minimale.

  • La version de la fonction que vous utilisez peut ne pas correspondre à la version d'origine de la fonction lors de son introduction. Peut-être que d'autres arguments ont été ajoutés. Vérifiez si cela compte pour votre utilisation particulière. Sinon, vous pouvez ignorer cela. Si oui, alors trouvez la version source la plus ancienne qui prend en charge ce que votre code attend.

  • Tester. Obtenez une copie de la version de la bibliothèque que vous prétendez prendre en charge au minimum et essayez-la.

  • Parfois, des modifications mineures ont été apportées à une fonction, et votre code n'a pas fondamentalement besoin d'une version plus récente. Mais il faudra peut-être l'adapter pour prendre en charge plusieurs versions (si c'est ce que vous voulez). Vous devrez peut-être tester si la fonction existe ( fboundp) ou a la bonne séquence signature / appel. Pour ce dernier, cela subr-aritypeut aider avec les fonctions intégrées, mais vous devrez peut-être utiliser condition-casedes fonctions Lisp (appeler avec le nombre étendu d'arguments et gérer une erreur de mauvais nombre d'arguments en appelant avec moins d'arguments).

A dessiné
la source