よくある質問 (FAQ)

Zapcc とは何ですか?

Zapcc は clang をベースとした C++ コンパイラーで、より高速なコンパイルを実現できるようにデザインされています。

Zapcc のステータスはどうですか?

現在、2番目のベータ版が用意されています。初回ベータ版のユーザーによる評価では、既にプロジェクトで大幅な加速が報告されています。

購入前に製品の評価をできますか?

はい。ベータ版を公開しています。こちらからベータ版をお申し込みください。

どのようにZapcc をテストしていますか?

LLVM LIT テストツールで internally-written テストを使用し、以下のような多くのオープンソース ライブラリーとプロジェクトでボットをビルドしています:
AMPL, bitsharesBoost libraries, Bullet, clang, cmake, dealiiEigen, folly, LLVM, mesos, mongodb, ninjant2, PHP, POCO, Quantlib, seastar  など。

パフォーマンス結果を公開していますか?

はい。ベンチマークの初回ベータ版はこちら

実行時パフォーマンスに負荷はかかりますか?

いいえ。実行したさまざまなテストから Zapcc 生成コードの実行時パフォーマンスは、clang によって生成されたコードと同等です。

Zapcc は Clang と互換性がありますか?

はい。Zapcc は、頻繁に最新の Clang svn から更新されます。

Zapcc は GCC と互換性がありますか?

はい。Zapcc は GCC と互換性があります。

Sanitizer をサポートしていますか?

いいえ、現段階ではしていません。

私のプロジェクトは Zapcc でコンパイルできません。

プロジェクトが Clang で正常にコンパイルできることをを確認してください。対象のプロジェクトが Clang でコンパイルできない場合、Zapcc は Clang をベースとしているので、Clang と同様にコンパイルすることはできません。

どの OS をサポートしていますか?

Linux x64 用の Zapcc をリリースしました。

MacOS と Windows x64 / Visual C++ 互換バージョンを開発中です。

"トリック" はありますか?

トリックはありません。Zapcc は、クライアント - サーバアーキテクチャのメモリ内のコンパイルキャッシュを使用し、実行間のすべてのコンパイル情報を記憶します。‘zapccs’ がサーバであり、一方、‘zapcc’ はクライアントとなります。Zapcc を実行するたびに既存のサーバーを再利用します。ない場合は、新しいサーバーを使用します。

Zapcc の仕組みに関するより詳細な技術情報は こちらを参照してください。

プリコンパイル済みヘッダーとの違いは何ですか?

プリコンパイル済みヘッダーは、正確なプリコンパイル済みヘッダールールにプロジェクトをビルドする必要があります。ほとんどのプロジェクトでは、プリコンパイル済みヘッダーを使用することはありません。Zapcc は既存のビルド内で動作します。

現在、Zapcc ではプリコンパイル済みヘッダーを無視します。

Zapcc を使用するにはどのくらいのメモリが必要ですか?

無限にメモリを使用してサーバーを強制終了させないために、Zapcc にはメモリ制限があり、空きキャッシュとメモリ使用率が低い状態で再起動すると自動的にリセットされます。メモリー制限は、bin/zapccs.config の [MaxMemory] で設定でき、これを変更して、メモリー使用量や、使用するサーバー数 (“make -j”) を最適化できます。通常、+1 物理コア以上を使用する場合には、-j パラメーターを設定しないでください。ハイパースレッディングが有効な Intel CPU にとっては重要で、物理コア数が 2 倍になります。このような場合、Zapcc は、より少ないサーバーで、より高いメモリー制限を使用して、より高速になります。

メモリーの価格は安いので、コストを下げるには、Zapcc を起動するすべてのサーバーに十分な物理メモリーを割り当てることを推奨します。

Zapcc が使うメモリ解放するには?

一度にすべてのサーバーを強制終了するには、

zapcc -cc1 -reset-server

または

kill zapcc

ccache、distcc、warp、または like に依存していますか?

いいえ。

すべてのコンパイル済みのコードをキャッシュしますか? その場合、ソース ファイルを編集し、リコンパイルできますか?

bin/zapccs.config の [Mutable] セクションにリストされたファイルはキャッシュされていません。デフォルトでは、*.c, *.cc, *.cpp, *.cxx とさまざまなライブラリーの macro-dependent ヘッダー ファイルが含まれます。

Zapcc はコンパイル時間をどれくらい高速にすると思いますか?

これは、ヘッダファイルの複雑さと、ソースファイルの複雑さによります。これは、プレーンな C プロジェクトの場合は全くアクセラレーションがかからず、テンプレートの多いプロジェクトをビルドする場合は 2 -5 倍まで、1 ファイルの増分変更を行う developer-build の場合は 50 倍の高速化を期待できます。

参照番号として、Zapcc は、clang を使用して clang をビルドするのと比べて、clang のビルドをすべて約 2 倍の高速化を期待できます。

Zapcc は C プロジェクトも加速しますか?

いいえ。

最適化のヒント: 共有と静的構成のビルドは別々に行ってください

以下の順番で、共有と静的の構成の両方の各ファイルをビルドするビルド システムがあります:

静的から共有の変更 (およびその逆) では、コンパイルごとに Zapcc のキャッシュを無効にし、その結果、ビルド パフォーマンスの低下を招きます。この解決策として、以下のように、異なる構成で別々にビルドします:

>configure --disable-shared && make && configure --disable-static && make

同様に、コンパイル間で他のフラグに変更しないでください。多くのフラグを変更することでキャッシュの無効とリセットを招きます。

最適化のヒント: マクロに依存したヘッダー

コンパイル中に変更が発生する、マクロの変更に依存するヘッダーは、キャッシュのリセットとパフォーマンスの問題を招きます。コマンドラインでマクロの定義を考慮する際に、キャッシュ全体で一貫した定義となるように確認してください。たとえば、以下、Boost.Threads の場合:

zapcc *.cpp -DBOOST_THREAD_PROVIDES_CONDITION -DBOOST_THREAD_USES_DATETIME

どのようにZapcc のライセンスを取得しますか?

Zapcc は、Ceemple Software 社の商用ライセンスで利用可能になります。

なぜ Zapcc を作りましたか?

C ++ は最高のプログラミング言語の 1 つです。しかし、言語の複雑さと、特にテンプレート化されたヘッダーファイルのために、C ++ のコンパイル時間は、ますます長くなっています。私たちは改善の機会を確認したので、Zapcc の開発を始めました。

このプロジェクトを支援しているのは誰ですか?

開発チームは、Yaron Keren と Ophir Herbst によって率いられています。本社は イスラエルに拠点を置く Ceemple Software 社です。

その他、ご質問などがございましたらお気軽にお問い合わせください。


無償評価版ダウンロード