Je lance parfois plusieurs versions d'Emacs à partir du même répertoire personnel. J'ai un certain nombre de fichiers compilés en octets. Le bytecode n'est pas compatible avec toutes les versions d'Emacs, donc je gère des répertoires distincts pour les .elc
fichiers pour chaque plage de versions.
Quelles sont les gammes de versions pour lesquelles le bytecode est compatible? J'ai actuellement
gnu-19.29
gnu-20
gnu-21
gnu-22
gnu-23
gnu-24
source
x-19
x-20
x-21
c'est-à-dire des répertoires pour chaque version majeure, avec une séparation supplémentaire à 19.29 (je n'ai jamais utilisé une version plus ancienne sur cette machine, sinon il y en aurait gnu-19
), et des répertoires séparés pour GNU Emacs et XEmacs. Je suis probablement trop prudent, cependant.
Quelle est la politique officielle concernant la compatibilité des bytecodes entre les versions Emacs? Puis-je continuer à utiliser la version principale en toute confiance? Puis-je fusionner certaines versions? Existe-t-il une indication de version de bytecode ou une somme de contrôle que je pourrais interroger lors de la compilation pour créer le nom du répertoire au lieu de compter sur la version d'Emacs?
Notez que je suis principalement intéressé par la compatibilité complète, pas seulement par la compatibilité descendante. Je pourrais exécuter Emacs 27.3 et compiler des fichiers en octets, puis plus tard Emacs 27.2 avec le même répertoire personnel.
Réponses:
En tant que responsable, je m'efforce de préserver les éléments suivants:
Bien sûr, ce qui précède concerne spécifiquement le code compilé en octets, et dépend toujours de la compatibilité générale réelle: s'il
foo.el
s'exécute dans Emacs-19 et Emacs-27, unfoo.elc
compilé sur Emacs-19 devrait fonctionner sur Emacs-27. Mais si celafoo.el
ne fonctionne pas sur Emacs-19 ou sur Emacs-27, alors lefoo.elc
compilé sur Emacs-19 ne fonctionnera probablement pas sur Emacs-27.En outre, il existe quelques cas où nous brisons consciemment la compatibilité descendante du code compilé en octets.
la source
Vous ne devez pas vous attendre à ce que les fichiers de bytecode soient compatibles entre les différentes versions d'Emacs. Le format de bytecode réel est principalement compatible avec les versions ascendantes, mais vous rencontrerez des problèmes avec les macros étendues.
Laisse-moi expliquer. Lorsque le compilateur d'octets rencontre une macro, il calcule l'expansion de la macro et compile le résultat. Si la macro s'est développée pour appeler une fonction, le fichier de bytecode résultant contiendra une référence à la fonction. Si une fonction interne qui apparaît dans l'extension d'une macro change entre les versions d'Emacs, alors le bytecode ne sera pas compatible.
Évidemment, les développeurs d'Emacs essaient d'éviter les macros qui s'étendent aux fonctions internes qui pourraient changer. Cependant, cela est parfois difficile à réaliser, et je ne compterais pas là-dessus, en particulier en présence de grands changements tels que l'introduction d'
gv.el
Emacs 24.la source