Ich führe manchmal mehrere Versionen von Emacs aus demselben Home-Verzeichnis aus. Ich habe eine Reihe von bytekompilierten Dateien. Bytecode ist nicht für alle Emacs-Versionen kompatibel, daher verwalte ich separate Verzeichnisse für .elc
Dateien für jeden Versionsbereich.
Für welche Versionsbereiche ist der Bytecode kompatibel? Ich habe derzeit
gnu-19.29
gnu-20
gnu-21
gnu-22
gnu-23
gnu-24
source
x-19
x-20
x-21
dh Verzeichnisse für jede Hauptversion mit einer zusätzlichen Trennung um 19.29 Uhr (ich habe noch nie eine ältere Version auf diesem Computer verwendet, sonst würde es eine geben gnu-19
) und separate Verzeichnisse für GNU Emacs und XEmacs. Ich bin jedoch wahrscheinlich übermäßig vorsichtig.
Was ist die offizielle Richtlinie bezüglich der Bytecode-Kompatibilität zwischen Emacs-Versionen? Kann ich die Hauptversion sicher weiter verwenden? Kann ich einige Versionen zusammenführen? Gibt es eine Bytecode-Versionsangabe oder Prüfsumme, die ich beim Kompilieren abfragen könnte, um den Verzeichnisnamen zu erstellen, anstatt mich auf die Emacs-Version zu verlassen?
Beachten Sie, dass ich hauptsächlich an der vollständigen Kompatibilität interessiert bin, nicht nur an der Abwärtskompatibilität. Ich könnte Emacs 27.3 ausführen und einige Dateien per Byte kompilieren, und später Emacs 27.2 mit demselben Home-Verzeichnis.
Antworten:
Als Betreuer bemühe ich mich, Folgendes zu bewahren:
Das Obige bezieht sich natürlich speziell auf den Byte-kompilierten Code und hängt immer noch von der tatsächlichen allgemeinen Kompatibilität ab: Wenn er
foo.el
in Emacs-19 und Emacs-27 ausgeführt wird, sollte einfoo.elc
auf Emacs-19 kompilierter Code auf Emacs-27 funktionieren. Aber wenn dasfoo.el
auf Emacs-19 oder Emacs-27 nicht funktioniert, funktioniert das auf Emacs-19foo.elc
kompilierte auf Emacs-27 wahrscheinlich nicht.Es gibt auch einige Fälle, in denen wir die Abwärtskompatibilität von bytekompiliertem Code bewusst aufheben.
quelle
Sie sollten nicht erwarten, dass Bytecode-Dateien zwischen verschiedenen Emacs-Versionen kompatibel sind. Das eigentliche Bytecode-Format ist größtenteils aufwärtskompatibel, aber Sie werden Probleme mit erweiterten Makros haben.
Lassen Sie mich erklären. Wenn der Byte-Compiler auf ein Makro stößt, berechnet er die Erweiterung des Makros und kompiliert das Ergebnis. Wenn das Makro zu einem Aufruf einer Funktion erweitert wurde, enthält die resultierende Bytecodedatei einen Verweis auf die Funktion. Wenn sich eine interne Funktion, die in der Erweiterung eines Makros angezeigt wird, zwischen den Emacs-Versionen ändert, ist der Bytecode nicht kompatibel.
Offensichtlich versuchen die Emacs-Entwickler, Makros zu vermeiden, die sich auf interne Funktionen ausweiten, die sich möglicherweise ändern. Dies ist jedoch manchmal schwierig zu erreichen, und ich würde nicht damit rechnen, insbesondere bei großen Änderungen wie der Einführung von
gv.el
Emacs 24.quelle