purecopy
tidak pernah diperlukan dalam konfigurasi pengguna atau perpustakaan pihak ketiga. Bahkan, itu adalah no-op ketika dipanggil dari instance Emacs normal. Dari Penyimpanan Murni :
Fungsi ini adalah no-op kecuali saat Emacs sedang dibangun dan dibuang ; biasanya disebut hanya dalam file Lisp yang dimuat sebelumnya.
Beberapa informasi latar belakang berikut.
Penyimpanan Murni
Emacs memiliki proses pembangunan dua tahap. Pertama membangun biner biasa, dan kemudian menjalankan biner ini, memuat kumpulan perpustakaan bawaan yang dipilih, dan kemudian membuang gambar memori dari proses, dan menciptakan emacs
biner nyata dari dump ini.
Alasan untuk proses yang berbelit-belit ini adalah kinerja yang lebih baik dan penggunaan memori yang lebih sedikit: Pra-loading essential Emacs Lisp libraries memungkinkan startup lebih cepat, karena tidak ada IO lebih lanjut diperlukan untuk memuat perpustakaan built-in, dan mengurangi penggunaan memori, karena perpustakaan pre-loaded dapat dibagikan di antara semua instance Emacs.
Area memori khusus ini yang berisi pustaka yang dimuat sebelumnya adalah "penyimpanan murni". Dibaca hanya, karena itu "murni", untuk memungkinkan berbagi memori yang disebutkan sebelumnya. Karenanya, purecopy
adalah no-op dalam contoh Emacs yang normal: Lagipula itu tidak bisa menulis ke penyimpanan murni. Akibatnya, penyimpanan murni juga dibebaskan dari pengumpulan sampah.
Namun, saat membuat dan membuang gambar memori untuk pustaka yang dimuat sebelumnya, pustaka ini dapat digunakan purecopy
untuk "menandai" objek tertentu untuk alokasi dalam penyimpanan murni, toh biasanya objek yang sering digunakan yang dibutuhkan untuk seluruh masa pakai Emacs.
String dalam penyimpanan murni pada dasarnya adalah string konstan statis global. Karena "make -k"
akan sering digunakan dalam menjalankan sesi Emacs (kemungkinan ini adalah perintah kompilasi yang paling sering digunakan, bahkan hari ini), masuk akal untuk menjaga string ini konstan dan statis, untuk menghindari alokasi ulang yang tidak perlu dan pengumpulan sampah.
Konsep penyimpanan murni adalah juga alasan mengapa memodifikasi .el
file dari beberapa built-in perpustakaan (terutama startup.el
, subr.el
, dan lain-lain) tidak memiliki pengaruh: Emacs pernah benar-benar beban file sumber perpustakaan tersebut. Sebagai gantinya, ia memiliki kode byte yang dibangun ke dalam binernya, dan memuatnya dari area memori khusus.