Às vezes, executo várias versões do Emacs a partir do mesmo diretório inicial. Eu tenho vários arquivos compilados em bytes. O bytecode não é compatível em todas as versões do Emacs, por isso mantenho diretórios separados para .elc
arquivos para cada intervalo de versões.
Quais são os intervalos de versões para os quais o bytecode é compatível? Eu tenho atualmente
gnu-19.29
gnu-20
gnu-21
gnu-22
gnu-23
gnu-24
source
x-19
x-20
x-21
isto é, diretórios para cada versão principal, com uma separação adicional em 19.29 (eu nunca usei uma versão mais antiga nesta máquina, caso contrário, haveria gnu-19
) e separar diretórios para GNU Emacs e XEmacs. Eu sou provavelmente muito cauteloso, no entanto.
Qual é a política oficial em relação à compatibilidade de bytecode nas versões do Emacs? Posso continuar usando a versão principal com confiança? Posso mesclar algumas versões? Existe uma indicação de versão de bytecode ou soma de verificação que eu poderia consultar ao compilar para criar o nome do diretório em vez de confiar na versão do Emacs?
Observe que meu principal interesse é a compatibilidade total, não apenas a compatibilidade com versões anteriores. Posso executar o Emacs 27.3 e compilar alguns arquivos e depois o Emacs 27.2 com o mesmo diretório inicial.
Respostas:
Como mantenedor, eu me esforço para preservar o seguinte:
Obviamente, o acima é especificamente sobre o código compilado de bytes e ainda depende da compatibilidade geral real: se for
foo.el
executado no Emacs-19 e Emacs-27, umfoo.elc
compilado no Emacs-19 deverá funcionar no Emacs-27. Mas se issofoo.el
não funcionar no Emacs-19 ou no Emacs-27, então ofoo.elc
compilado no Emacs-19 provavelmente não funcionará no Emacs-27.Além disso, existem alguns casos em que conscientemente quebramos a compatibilidade com versões anteriores do código compilado por bytes.
fonte
Você não deve esperar que os arquivos de bytecode sejam compatíveis entre diferentes versões do Emacs. O formato real do bytecode é principalmente compatível com versões anteriores, mas você terá problemas com macros expandidas.
Deixe-me explicar. Quando o byte-compiler encontra uma macro, ele calcula a expansão da macro e compila o resultado. Se a macro for expandida para uma chamada para uma função, o arquivo de bytecode resultante conterá uma referência à função. Se uma função interna que aparece na expansão de uma macro for alterada entre as versões do Emacs, o bytecode não será compatível.
Obviamente, os desenvolvedores do Emacs tentam evitar macros que se expandem para funções internas que podem mudar. No entanto, isso às vezes é difícil de conseguir, e eu não contaria com isso, principalmente na presença de grandes mudanças, como a introdução do
gv.el
Emacs 24.fonte