purecopy
ユーザー設定やサードパーティのライブラリでは必要ありません。実際、通常のEmacsインスタンスから呼び出された場合、何もしません。Pure Storageから:
この関数は、Emacsが構築およびダンプされている間を除き、何もしません。通常、プリロードされたLispファイルでのみ呼び出されます。
いくつかの背景情報が続きます。
純粋なストレージ
Emacsには2段階のビルドプロセスがあります。最初にプレーンバイナリをビルドしてから、このバイナリを実行し、選択した組み込みライブラリのセットをロードしてから、プロセスのメモリイメージをダンプし、emacs
このダンプから実際のバイナリを作成します。
この複雑なプロセスの理由は、パフォーマンスの向上とメモリ使用量の削減です。重要なEmacs Lispライブラリをプリロードすると、組み込みライブラリをロードするためのIOが不要になるため、起動が速くなります。すべてのEmacsインスタンス間で共有できます。
プリロードされたライブラリを含むこの特定のメモリ領域は「純粋なストレージ」です。前述のメモリ共有を可能にするため、読み取り専用であるため、「純粋」です。したがって、purecopy
通常のEmacsインスタンスではノーオペレーションです。とにかく純粋なストレージに書き込むことができませんでした。その結果、純粋なストレージもガベージコレクションから除外されます。
ただし、プリロードされたライブラリのメモリイメージを作成およびダンプする際に、これらのライブラリを使用purecopy
して、純粋なストレージに割り当てる特定のオブジェクトをマークできます。通常は、とにかくEmacsの全寿命に必要な頻繁に使用されるオブジェクトです。
純粋なストレージ内の文字列は、本質的にグローバルな静的定数文字列です。ので"make -k"
(それも、おそらく今日最も頻繁に使用されるコンパイルコマンドです)Emacsのセッションを実行している中で頻繁に使用されようとしている、それが再割り当てとガベージコレクションの不要なを避けるために、この文字列定数と静的を保つために理にかなっています。
純粋なストレージのこの概念はまた、なぜ修正の理由で.el
、いくつかの組み込みのライブラリ(特にのファイルstartup.el
、subr.el
など)の効果はありません:Emacsは実際にこれらのライブラリのソースファイルをロードすることはありません。代わりに、バイナリにバイトコードが組み込まれ、特別なメモリ領域からロードされます。