purecopy
ніколи не потрібні в конфігурації користувача або сторонніх бібліотеках. Насправді, це не-оп, коли його викликають із звичайного екземпляра Emacs. З чистого зберігання :
Ця функція заборонена, за винятком випадків, коли Emacs будується та скидається ; його зазвичай називають лише у попередньо завантажених файлах Lisp.
Нижче випливає деяка довідкова інформація.
Чисте зберігання
Emacs має двоступеневий процес збирання. Він спочатку будує звичайний двійковий файл, а потім запускає цей двійковий файл, завантажує вибраний набір вбудованих бібліотек, а потім скидає зображення пам'яті процесу та створює справжній emacs
бінарний файл із цього дампа.
Причини цього згорнутого процесу полягають у кращій продуктивності та меншому використанні пам’яті: Попереднє завантаження основних бібліотек Emacs Lisp дозволяє швидше запустити, оскільки для завантаження вбудованих бібліотек не потрібно більше вводу-виводу і зменшує використання пам'яті, оскільки попередньо завантажені бібліотеки можна поділитися між усіма примірниками Emacs.
Ця конкретна область пам'яті, яка містить попередньо завантажені бібліотеки, є «чистим сховищем». Це читається тільки, отже, «чисто», щоб дозволити спільний обмін пам’яттю. Отже, purecopy
в нормальних екземплярах Emacs немає жодної операції: все-таки він не міг записатись у чисту сховище Отже, чисте зберігання також звільнене від вивезення сміття.
Однак, створюючи та скидаючи зображення пам'яті для попередньо завантажених бібліотек, ці бібліотеки можуть використовувати purecopy
для "маркування" конкретні об'єкти для розподілу в чистому сховищі, як правило, часто використовувані об'єкти, які так чи інакше потрібні протягом усього життя Emacs.
Струни в чистому сховищі - це по суті глобальні статичні постійні струни. Оскільки "make -k"
він буде часто використовуватися для запуску сеансів Emacs (це, мабуть, найчастіше використовується команда компіляції навіть сьогодні), має сенс тримати цей рядок постійним та статичним, щоб уникнути зайвого перерозподілу та збирання сміття.
Ця концепція чистого зберігання також є причиною того, чому зміни в .el
файли деяких вбудованих бібліотек ( в Зокрема startup.el
, subr.el
і інші) не має ніякого ефекту: Emacs ніколи на насправді завантажує вихідні файли цих бібліотек. Натомість у них вбудований їхній байтовий код у свій бінарний файл та завантажує їх із спеціальної області пам'яті.