import{_ as i,c as s,o as e,ae as n}from"./chunks/framework.l7bN90nj.js";const k=JSON.parse('{"title":"Compilation","description":"","frontmatter":{},"headers":[],"relativePath":"zh/design/compilation.md","filePath":"zh/design/compilation.md"}'),t={name:"zh/design/compilation.md"};function l(p,a,o,r,h,c){return e(),s("div",null,[...a[0]||(a[0]=[n(`<h1 id="compilation" tabindex="-1">Compilation <a class="header-anchor" href="#compilation" aria-label="Permalink to &quot;Compilation&quot;">​</a></h1><h2 id="incremental-parsing" tabindex="-1">Incremental Parsing <a class="header-anchor" href="#incremental-parsing" aria-label="Permalink to &quot;Incremental Parsing&quot;">​</a></h2><p>每当你修改代码时，clice 都必须重新解析文件。clice 使用一种叫做 preamble 的机制实现增量编译以加快重新解析速度。preamble 可被视为 <a href="https://clang.llvm.org/docs/PCHInternals.html" target="_blank" rel="noreferrer">Precompiled Header</a> 的一种特殊情况（内嵌在源文件中）。在打开文件的时候，它会将文件开头的几个预处理指令（被叫做 preamble）构建成 PCH 缓存在磁盘上，后续在解析的时候则可以直接加载 PCH 文件，从而跳过前面几个预处理指令，这样可以大大减少要重新解析的代码量。</p><p>例如，对于如下的代码</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;iostream&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">int</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> main</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> () {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">    std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::cout </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;Hello world!&quot;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;&lt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::endl;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><code>iostream</code> 这个头文件大概有 2w 行代码，clice 会先把 <code>#include &lt;iostream&gt;</code> 这一行代码构建成 PCH 文件，在完成之后在使用这个 PCH 文件来解析后面的代码。这样的话后续重新解析的代码量就只剩 5 行了，而不是原本的 2w 行，速度会变得非常快。除非你修改了 preamble 部分的代码，导致需要构建新的 preamble。</p><h2 id="cancel-compilation" tabindex="-1">Cancel Compilation <a class="header-anchor" href="#cancel-compilation" aria-label="Permalink to &quot;Cancel Compilation&quot;">​</a></h2>`,7)])])}const m=i(t,[["render",l]]);export{k as __pageData,m as default};
