Emacs sürümleri arasında bayt kodunun taşınabilirliği


9

Bazen aynı ana dizinden birden fazla Emac sürümü çalıştırıyorum. Bayt-derlenmiş dosyalarım var. Bytecode tüm Emacs sürümlerinde uyumlu değildir, bu nedenle .elcher sürüm aralığı için dosyalar için ayrı dizinler tutarım.

Bayt kodunun uyumlu olduğu sürüm aralıkları nelerdir? Şu anda sahibim

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

yani her bir büyük sürüm için dizinler, 19.29 ek bir ayırma ile (bu makinede hiç eski bir sürümünü kullanmadım, aksi takdirde olurdu gnu-19) ve GNU Emacs ve XEmacs için ayrı dizinler. Yine de muhtemelen çok temkinliyim.

Emacs sürümlerinde bayt kod uyumluluğu ile ilgili resmi politika nedir? Ana sürümü güvenle kullanmaya devam edebilir miyim? Bazı sürümleri birleştirebilir miyim? Emacs sürümüne güvenmek yerine dizin adını oluşturmak için derlerken sorgulayabileceğim bir bayt kodu sürümü göstergesi veya sağlama toplamı var mı?

Yalnızca geriye dönük uyumlulukla değil, öncelikle tam uyumlulukla ilgilendiğimi unutmayın. Emacs 27.3'ü çalıştırabilir ve bazı dosyaları bayt-derleyebilir ve daha sonra Emacs 27.2'yi aynı giriş diziniyle çalıştırabilirim.


Meraktan, neden böyle eski sürümleri çalıştırıyorsunuz? 19 şimdiye kadar on yıldan fazla olmalı.
Tyler

Bazı Emacs 24.2 .elc dosyaları Emacs 24.3 ile çalışmaz: github.com/mooz/js2-mode/issues/72
Wilfred Hughes

Yanıtlar:


9

Koruyucu olarak, aşağıdakileri korumaya çalışırım:

  • Bayt kodunun geriye dönük uyumluluğu. Yani, Emacs-19 ile derlenmiş .elc dosyanızı alıp Emacs-27'de başarıyla çalıştırabilmelisiniz. Tabii ki, pratikte her zaman işe yaramaz, çünkü geriye dönük uyumsuzluklar kaza ile veya bilinçli olarak ortaya çıkar (bunlar genellikle byte derlenmiş dosyalara özgü değildir).
  • Büyük bir sürümde tam bayt kodu uyumluluğu. Bunu daha az dikkatle takip eder, çünkü çoğunlukla otomatik olarak gerçekleşme eğilimindedir, ancak normal olarak 27.N'de bayt-derleyebilmeniz ve 27.1'de başarıyla çalıştırabilmeniz gerekir. Bununla birlikte, eski sürümde her zaman bayt-derleme yapılması önerilir.

Tabii ki, yukarıdaki özellikle bayt derlenmiş kod ile ilgilidir ve hala gerçek genel uyumluluğa bağlıdır: foo.elEmacs-19 ve Emacs-27'de çalışırsa, Emacs-19 foo.elcüzerinde derlenmiş bir Emacs-27 üzerinde çalışmalıdır. Ancak bu foo.elEmacs-19 veya Emacs-27'de işe yaramazsa, Emacs-19'da foo.elcderlenen muhtemelen Emacs-27 üzerinde çalışmaz.

Ayrıca, bayt derlemeli kodun geriye dönük uyumluluğunu bilinçli olarak kırdığımız birkaç durum vardır.


5

Bayt kodu dosyalarının farklı Emacs sürümleri arasında uyumlu olmasını beklememelisiniz. Gerçek bayt kodu biçimi çoğunlukla yukarı doğru uyumludur, ancak genişletilmiş makrolarla sorun yaşarsınız.

Açıklamama izin ver. Bayt derleyici bir makroyla karşılaştığında, makronun genişlemesini hesaplar ve sonucu derler. Makro bir işlev çağrısına genişletilirse, sonuçtaki bayt kodu dosyası işleve bir başvuru içerir. Bir makronun genişletilmesinde görünen dahili bir işlev Emacs sürümleri arasında değişirse, bayt kodu uyumlu olmaz.

Açıkçası, Emacs geliştiricileri değişebilecek iç işlevlere genişleyen makrolardan kaçınmaya çalışır. Ancak, bunu başarmak bazen zordur ve özellikle gv.elEmacs 24'ün tanıtımı gibi büyük değişikliklerin varlığında buna güvenmem.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.