2017-02-09 4 views
0

これはちょっと狂っているかもしれませんが、私は次の考えを持っていました...アイデアC++の自動統一ビルドシステム、それは動作しますか?

#includeを使ってすべてのコードを1つのファイルに入れたり、単純にコピーして貼り付けたときに、これにより、稲妻の高速コンパイルが可能になります。

ここでは簡単にするため、ヘッダーのみのライブラリがあると仮定し、クラスを使用するように制限しています(名前空間には名前空間があります)。 これは自動化されていればうまくいかないかと思いました。スクリプト/ツールは、.hファイルを前処理します。インクルードと依存関係の抽出。このツールはすべての.hファイルを再帰的に処理し、インクルードの依存関係のマッピングを構築します。次に、#includesを使用してこれらの依存関係を1つのファイル(main.cpp)に置き、コンパイルします。

今、私はあなたの男の意見を自動統合の作成者のこのアイデアにしたいと思います。これはスマートですか?私はそれが期待通りに機能するだろうか?

答えて

1

ユニティビルドは実際にはオーバープライドされています。

これにより、高速のコンパイルが可能です。

これは最近では当てはまりません。十分なRAMを持つコンパイル専用のマシンを持っていると仮定すると、コンパイルはI/Oバウンドではありません。現代のオペレーティングシステムは、最初に読み込んだ後にファイルをキャッシュし、メモリから取得するよりも、キャッシュします。中間ファイルは、配管やRAMドライブに格納することで回避できます。したがって、プリプロセッサの作業は、ほとんどの場合、ファイルを連結するだけです。これは速いです。コンパイルとリンクにはリアルタイムが費やされます。

何千ものファイルを持つ深刻なアプリケーションは膨大なものになります。現実世界の例 - 私たちは、ソースコードが100MB以上のデータを必要とするアプリケーションで動作します(システムおよびサードパーティインクルードなし)。したがって、お使いのシステムは約150MBのファイルで動作する必要があります。コンパイラによってコンパイルが拒否された場合、私は驚くことはありません。コンパイルする時間はもちろんですが。小さなファイルに分割して並列にコンパイルする方が良い方法です。再び実際の例 - シングルスレッドコンパイルは40分かかり、1つのサーバー上で16スレッドで2.5〜3分実行し、16サーバーのファームで16コアをdistccで30秒間にリンクしてリンクします。

LTOと静的ビルドを行うと、より良い最適化であるユニティビルドのもう1つの利点がなくなります。

あなたの質問に答える - そうすることができます。それは理にかなっていますか?疑わしい。

+0

150MBのファイルを作成するにはどのくらいの時間がかかりますか?私は、コードベースのためにビルドが一日中行われたという話を聞いてきました。 1つのファイルにすべてを組み込むときには数分かかりました。 – efel

+0

私は他のビルドのために話すことができません - 私は知っているもののためにすることができます。さらに、どのくらいのメモリが必要ですか? LTOを単独で使用した例では、約35GBのRAMが必要でしたが、gcc 5.1または5.4で改善された後で、クラッシュしました。 – Anty

0

あなたは何を達成しましたか?

「毎回世界を再コンパイルする必要がある」ため、「ヘッダーのみ」は嫌です。あなたの "勇敢な新世界"には1つのファイルしかないので、何時でも毎回コンパイルされるつもりです。

人々は、コンパイルを高速化するためにライブラリなどを使用できるように、C++を作るのに多くの時間と労力を費やしました。ああ、私が今日見ているシステムでは、1700万行以上のコードがあります。あなたは1つのファイルでそれをしたいですか?

コメントでOPによって提供されたリンクはよい説明です。私が見る大きな問題はスケーラビリティです。ガードがインクルードの外側にある(継承された)コードベースの1つの領域を思い出させて、ファイルを開かないようにしました。例えば

#ifndef BLAH_H 
#include <blah.h> 
#endif 
+0

はい。どうしても、ラムに収まり、gccがそれを受け入れるならば。あなたが今やっていることよりも速くコンパイルされますか? – efel

+0

いいえ、ヒープが遅くなります。今度は、システム内の1,700万行を変更しなかったファイル内の1000行のコードを再コンパイルします。 – John3136

+0

しかし、あなたが解放しなければならないとどうなりますか?新しいハードウェアを再コンパイルまたは多額の投資に1週間費やす必要がありますか? – efel

関連する問題