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