Zapccは、Clang/LLVMのフォークをベースにしたキャッシングC++コンパイラであり、再コンパイル時に最大50倍、フルビルド時に2倍から5倍高速であると言われている。Creempleによって開発され、2015年末に初リリースされたZapccは、現在オープンソースである。
Zapccコンパイルの高速化の背景にある重要なアイデアは、コンパイルサーバ(zapccs
)を使用することである。コンパイルサーバ(zapccs)は、メモリ内にとどまり、クライアントからコンパイルコマンドを受け取る。 ZapccsはC++ヘッダファイルを1回だけ解析し、すべてのテンプレートのインスタンスと生成されたコードの両方をメモリに保持する。この点に関して、Zapccはプリコンパイル済みヘッダの強化版を使用していると見なすことができるが、実際にプリコンパイル済みヘッダをセットアップすることなくプリコンパイル済みヘッダよりも多くの情報をキャッシュできる。
Zapccは、過度に複雑なC++ヘッダファイル、特にテンプレートを使用するヘッダファイルを処理する場合、Clangよりも高速である。そのため、Zapccがboost::math
をビルドするときにClangよりも40倍速く、WebKitの完全ビルドで4倍速く、Clangの完全ビルドで2倍速いことは驚くべきことではない。同様に、インクリメンタルな再コンパイルでは、ZapccはClangより最大で50倍速くなる。一方、ソースファイルがヘッダファイルよりも複雑な場合、Zapccのメリットを享受できない。プレーンなCプロジェクトはZapccの最悪のケースであり、アクセラレーションがまったくない。実際、ZapccはCファイルのキャッシュを使えない。
Zapccによって生成されたコードの実行時パフォーマンスは、Clangによって生成されたコードの実行時パフォーマンスと同じであると、Creemple氏は述べている。
zapccs
によって使用されるメモリ量は、全体的なパフォーマンスを決定する重要な要素である。Zapccを使用すると、開発者はメモリ制限を設定して、その限界に達すると空のキャッシュで自動的にzapccs
を再開させることができる。Zapcc
は利用可能なサーバインスタンスが見つからない場合に新しいサーバインスタンスを開始しようとし、開発者は-j
フラグを使用して同時サーバの最大数を制御できる。プロジェクトの複雑さによるが、Zapccは実行するサーバ数が少なく、メモリの上限が高いと、実行速度が向上する。
中心となった開発者のYaron Keren氏によると、Zapccは大きく変更されたClangであり、200k以上の行が変更されている。そのため、いつの日にかCLangのベースラインにすることができると考えるのは非常に難しいことである。ZapccはClangとgccの当座の代替であり、すべてのビルドシステムとの統合を目指している。これは、Linux x64で完全にサポートされている。
Rate this Article
- Editor Review
- Chief Editor Action