purecopy
nunca é necessário na configuração do usuário ou em bibliotecas de terceiros. Na verdade, é um no-op quando chamado de uma instância normal do Emacs. Da Pure Storage :
Esta função não funciona, exceto enquanto o Emacs está sendo construído e despejado ; geralmente é chamado apenas em arquivos Lisp pré-carregados.
Algumas informações básicas a seguir.
Armazenamento Puro
O Emacs tem um processo de construção em duas etapas. Primeiro, ele cria um binário comum e, em seguida, executa esse binário, carrega um conjunto selecionado de bibliotecas internas e despeja uma imagem de memória do processo e cria o emacs
binário real desse despejo.
As razões para esse processo complicado são o melhor desempenho e o menor uso de memória: o pré-carregamento das bibliotecas essenciais do Emacs Lisp permite uma inicialização mais rápida, pois não é necessário mais IO para carregar as bibliotecas integradas e diminui o uso da memória, pois as bibliotecas pré-carregadas pode ser compartilhado entre todas as instâncias do Emacs.
Essa área de memória específica que contém as bibliotecas pré-carregadas é o "armazenamento puro". É somente leitura, portanto, "puro", permitir o compartilhamento de memória acima mencionado. Portanto, purecopy
é um não operacional em instâncias normais do Emacs: ele não conseguiu gravar no armazenamento puro de qualquer maneira. Consequentemente, o armazenamento puro também é isento de coleta de lixo.
No entanto, ao criar e despejar a imagem de memória para bibliotecas pré-carregadas, essas bibliotecas podem ser usadas purecopy
para "marcar" objetos específicos para alocação em armazenamento puro, geralmente objetos usados com frequência, necessários para toda a vida útil do Emacs.
As strings no armazenamento puro são essencialmente strings constantes estáticas globais. Como "make -k"
será usado com freqüência na execução de sessões do Emacs (provavelmente é o comando de compilação mais usado ainda hoje), faz sentido manter essa sequência constante e estática, para evitar realocação desnecessária e coleta de lixo.
Este conceito de armazenamento puro também é a razão por que modificar os .el
arquivos de alguns built-in bibliotecas (nomeadamente startup.el
, subr.el
e outros) não tem efeito: Emacs nunca realmente carrega os arquivos fonte dessas bibliotecas. Em vez disso, ele possui seu código de bytes embutido em seu binário e os carrega de uma área de memória especial.