Emacs 버전 간 바이트 코드 이식성


9

때로는 동일한 홈 디렉토리에서 여러 버전의 Emacs를 실행합니다. 많은 바이트 컴파일 파일이 있습니다. 바이트 코드는 모든 Emacs 버전에서 호환되지 않으므로 .elc각 버전 범위의 파일에 대해 별도의 디렉토리를 유지 관리 합니다.

바이트 코드가 호환되는 버전 범위는 무엇입니까? 나는 현재

gnu-19.29
gnu-20
gnu-21
gnu-22
gnu-23
gnu-24
source
x-19
x-20
x-21

즉, 19.29에서 추가로 분리 된 각 주요 릴리스의 디렉토리 (이 시스템에서는 이전 버전을 사용한 적이 없었습니다 gnu-19. 그래도 지나치게 신중할 것입니다.

Emacs 버전 간 바이트 코드 호환성에 관한 공식 정책은 무엇입니까? 메이저 버전을 계속 사용할 수 있습니까? 일부 버전을 병합 할 수 있습니까? Emacs 버전에 의존하지 않고 디렉토리 이름을 만들기 위해 컴파일 할 때 쿼리 할 수있는 바이트 코드 버전 표시 또는 체크섬이 있습니까?

이전 버전과의 호환성뿐만 아니라 전체 호환성에 주로 관심이 있습니다. Emacs 27.3을 실행하고 일부 파일을 바이트 컴파일 한 다음 나중에 동일한 홈 디렉토리로 Emacs 27.2를 작성할 수 있습니다.


호기심 때문에 왜 이전 버전을 실행합니까? 지금까지 19 세 이상은 10 년 이상이어야합니다.
Tyler

일부 Emacs 24.2 .elc 파일은 Emacs 24.3에서 작동하지 않습니다 : github.com/mooz/js2-mode/issues/72
Wilfred Hughes

답변:


9

관리자로서 다음을 보존하려고 노력합니다.

  • 바이트 코드의 이전 버전과의 호환성 즉, Emacs-19로 컴파일 된 .elc 파일을 가져 와서 Emacs-27에서 성공적으로 실행할 수 있어야합니다. 물론, 이전 버전과의 비 호환성이 우연히 또는 의식적으로 도입 되었기 때문에 실제로는 항상 작동하지는 않습니다 (일반적으로 바이트 컴파일 된 파일에는 해당되지 않습니다).
  • 메이저 버전 내에서 전체 바이트 코드 호환성. 대부분 자동으로 발생하는 경향이 있기 때문에주의를 기울이지 않아도되지만 일반적으로 27.N에서 바이트 컴파일하고 27.1에서 성공적으로 실행할 수 있습니다. 즉, 이전 버전에서는 항상 바이트 컴파일하는 것이 좋습니다.

물론 위의 내용은 바이트 컴파일 된 코드에 관한 것이며 여전히 실제 일반 호환성에 달려 있습니다. foo.elEmacs-19 및 Emacs-27에서 실행되면 Emacs-19에서 foo.elc컴파일 된 것이 Emacs-27에서 작동합니다. 그러나 foo.elEmacs-19 또는 Emacs-27에서 작동하지 않으면 Emacs-19에서 foo.elc컴파일 된 것은 아마도 Emacs-27에서 작동하지 않을 것입니다.

또한 바이트 컴파일 된 코드의 호환성을 의식적으로 깨뜨린 경우도 있습니다.


5

바이트 코드 파일이 다른 Emacs 버전간에 호환되지 않아야합니다. 실제 바이트 코드 형식은 대부분 상위 버전과 호환되지만 확장 매크로에 문제가 발생할 수 있습니다.

설명하겠습니다. 바이트 컴파일러는 매크로를 만나면 매크로의 확장을 계산하고 결과를 컴파일합니다. 매크로가 함수 호출로 확장 된 경우 결과 바이트 코드 파일에는 함수에 대한 참조가 포함됩니다. 매크로 확장에 나타나는 내부 기능이 Emacs 버전간에 변경되면 바이트 코드가 호환되지 않습니다.

분명히, Emacs 개발자는 변경 될 수있는 내부 기능으로 확장되는 매크로를 피하려고합니다. 그러나 이것은 때때로 달성하기 어려우며, 특히 gv.elEmacs 24 의 도입과 같은 큰 변화가있는 경우에는 그 사실에 의지하지 않을 것 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.