purecopy
Wird in Benutzerkonfigurationen oder Bibliotheken von Drittanbietern nie benötigt. Tatsächlich ist es ein No-Op, wenn es von einer normalen Emacs-Instanz aufgerufen wird. Aus reiner Lagerung :
Diese Funktion ist nur möglich, wenn Emacs erstellt und gesichert wird . Es wird normalerweise nur in vorinstallierten Lisp-Dateien aufgerufen.
Es folgen einige Hintergrundinformationen.
Reine Lagerung
Emacs hat einen zweistufigen Build-Prozess. Zuerst wird eine einfache Binärdatei erstellt, und dann wird diese Binärdatei ausgeführt, ein ausgewählter Satz integrierter Bibliotheken geladen, und anschließend wird ein Speicherabbild des Prozesses erstellt und die echte emacs
Binärdatei aus diesem Speicherauszug erstellt .
Die Gründe für diesen komplizierten Prozess sind eine bessere Leistung und eine geringere Speichernutzung: Das Vorladen der wichtigsten Emacs Lisp-Bibliotheken ermöglicht einen schnelleren Start, da zum Laden der integrierten Bibliotheken keine weiteren E / A-Vorgänge erforderlich sind kann von allen Emacs-Instanzen gemeinsam genutzt werden.
Dieser spezielle Speicherbereich, der die vorinstallierten Bibliotheken enthält, ist der "reine Speicher". Es ist nur lesbar, daher "rein", um die oben erwähnte Speicherfreigabe zu ermöglichen. Daher purecopy
ist es in normalen Emacs-Fällen ein No-Op: Es konnte sowieso nicht in den reinen Speicher geschrieben werden. Folglich ist auch die reine Lagerung von der Müllabfuhr befreit.
Während das Speicherabbild für vorinstallierte Bibliotheken erstellt und gesichert wird, können diese Bibliotheken jedoch purecopy
bestimmte Objekte für die Zuordnung im reinen Speicher "markieren". Dies sind normalerweise häufig verwendete Objekte, die ohnehin für die gesamte Lebensdauer von Emacs benötigt werden.
Zeichenfolgen im reinen Speicher sind im Wesentlichen globale statische konstante Zeichenfolgen. Da "make -k"
Emacs-Sitzungen häufig ausgeführt werden (dies ist wahrscheinlich auch heute noch der am häufigsten verwendete Kompilierungsbefehl), ist es sinnvoll, diese Zeichenfolge konstant und statisch zu halten, um unnötige Neuzuweisungen und Garbage Collection zu vermeiden.
Dieses Konzept der reinen Lagerung ist auch der Grund , warum die modifizierenden .el
Dateien von einigen integrierten Bibliotheken (vor allem startup.el
, subr.el
und andere) hat keine Auswirkung: Emacs nie tatsächlich lädt die Quelldateien dieser Bibliotheken. Stattdessen wird der Bytecode in die Binärdatei integriert und aus einem speziellen Speicherbereich geladen.