'Purecopy' işlevi ne için gerekli?


23

Geziniyordum compile.elve şu inşaatı fark ettim :

(defcustom compile-command (purecopy "make -k ")) 

purecopyDocs açıkladık:

saf kopya, 'C kaynak kodu' içinde yerleşik bir işlevdir.

(saf kopya OBJ)

OBJ nesnesinin bir kopyasını saf depolama biriminde yapın. Vektörlerin ve eksilerin hücrelerinin içeriğini tekrar tekrar kopyalar. Sembolleri kopyalamaz. Dizeleri metin özellikleri olmadan kopyalar.

Bu yüzden compile-command, ileriki bir tarihte değişiklik gerektirebilecek karmaşık bir liste içerdiği tahmin edildiğinde neden gerekli olabileceğini anlıyorum . Ancak onun sadece basit bir dize, neden purecopygerekli? Daha genel olarak ne zaman purecopyihtiyaç duyulur?

Yanıtlar:


31

purecopy kullanıcı konfigürasyonunda veya 3. parti kütüphanelerde hiçbir zaman gerekli değildir. Aslında, normal bir Emacs örneğinden çağrıldığında no- op'tur. Gönderen Saf Depolama :

Bu işlev Emacs yapımı ve atılması haricinde bir operasyon dışıdır ; genellikle yalnızca önceden yüklenmiş Lisp dosyalarında denir.

Bazı arka plan bilgileri izler.

Saf depolama

Emacs iki aşamalı bir yapım sürecine sahiptir. Önce düz bir ikili dosya oluşturur ve sonra bu ikili dosyayı çalıştırır, seçilen yerleşik kütüphaneler kümesini yükler ve ardından işlemin bellek görüntüsünü döker ve emacsbu dökümden gerçek ikili dosyayı oluşturur .

Bu karmaşık sürecin nedenleri daha iyi performans ve daha az bellek kullanımıdır: Ön yükleme temel Emacs Lisp kütüphaneleri daha hızlı başlatmaya izin verir, çünkü yerleşik kütüphaneleri yüklemek için başka bir IO gerekli değildir ve önceden yüklenmiş kütüphanelerden beri bellek kullanımını azaltır Tüm Emacs örnekleri arasında paylaşılabilir.

Önceden yüklenmiş kütüphaneleri içeren bu özel bellek alanı “saf depolama” dır. Daha önce bahsedilen hafıza paylaşımına izin vermek için salt “saf”. Bu nedenle, purecopynormal Emacs örneklerinde bir operasyon yok: Yine de saf depolamaya yazılamadı. Sonuç olarak, saf depolama da çöp toplama işleminden muaf tutulur.

Bununla birlikte, önceden yüklenmiş kütüphaneler için bellek görüntüsünü oluştururken ve dump ederken, bu kütüphaneler purecopysaf depolamada belirli nesneleri tahsis etmek için “işaretlemek” için, genellikle Emacs'ın tüm ömrü boyunca gerekli olan genellikle kullanılan nesneleri kullanabilirler.

Saf depodaki dizgiler, temel olarak global statik sabit dizgilerdir. Yana "make -k"(hatta, muhtemelen bugün en sık kullanılan derleme komutu var) Emacs oturumları çalışan sık kullanılan olacak, bu yeniden tahsisi ve çöp toplama gereksiz önlemek için, bu dize sabiti ve statik tutmak için mantıklı.

Saf depolama Bu kavram aynı zamanda neden değiştirerek nedenidir .elbazı yerleşik kütüphaneleri (özellikle dosyaları startup.el, subr.elEmacs gerçekte hiçbir zaman yükler bu kütüphanelerin kaynak dosyaları: ve diğerleri) hiçbir etkisi olmaz. Bunun yerine, bayt kodunu ikili kodunda yerleşik olarak bulunur ve bunları özel bir hafıza alanından yükler.

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.