問題タブ [compilation-time]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - MonoTouch のコンパイル時間を短縮するには?
ことはよく知られている.
コンパイルに 15 秒でもかかると、プログラマーはコンパイラーの実行中に退屈し、 The Onion の読み取りに切り替えます。
私たちの MonoTouch アプリは、Macbook Air でデバッグ/シミュレーター構成でコンパイルするのに 40 秒かかります。
ソリューションには約 10 個のアセンブリがあります。
また、一部のネイティブ ライブラリに対してgcc_flags
.
私が気付いていないコンパイル時間を最適化する方法があると確信しています。これは、参照、リンカーなどに関係している可能性があります。
私よりも知識が豊富な人が、デバッグ ビルドの MonoTouch コンパイル時間を短縮するためのヒントとチェック事項のリストをコンパイルしてくれることを期待して、この質問をしています。
MonoTouchに直接関係のないハードウェアの最適化や最適化を提案しないでください。
haskell - GHC でのコンパイルの高速化
を除いて-O0
、コンパイル時間を短縮できるオプションはありますか?
結果のプログラムが最適化されなくても問題ありません。実際には、大きな haskel パッケージを頻繁にすばやく型チェックしたいだけです。
フラグ-fno-code
はコンパイルを劇的に高速化しますが、このプログラムは TemplateHaskell を使用しているため使用できません。
c++ - Visual Studio での Cuda 並列コード生成
Visual Studio 2012 ソリューションにいくつかの C++ プロジェクトがあります。これらのプロジェクトには大量のファイルが含まれており、/MPを使用してコード生成を高速化しています。
同様の方法でNVCCも高速化する方法があるかどうか疑問に思っていました。CUDA カーネルを含むプロジェクトで /MP を使用しても、コンパイル時間にメリットはなく、1 つのコアしか動作していません。
問題は、マルチコア PC を使用して CUDA コンパイルを高速化するにはどうすればよいかということです。
swift - なぜ Swift のコンパイル時間はとても遅いのですか?
Xcode 6 Beta 6 を使用しています。
これはしばらくの間私を悩ませてきたものですが、今ではほとんど使用できないところまで来ています.
私のプロジェクトは、65 個の Swift ファイルといくつかのブリッジされた Objective-C ファイル (実際には問題の原因ではありません)という適切なサイズになり始めています。
Swift ファイルをわずかに変更すると (アプリでほとんど使用されないクラスに単純な空白を追加するなど)、指定されたターゲットの Swift ファイル全体が再コンパイルされるようです。
詳細な調査の結果、コンパイラ時間のほぼ 100% を占めているのは、CompileSwift
Xcode がswiftc
ターゲットのすべての Swift ファイルに対してコマンドを実行するフェーズであることがわかりました。
さらに調査を行ったところ、アプリ デリゲートとデフォルト コントローラーのみを保持すると、コンパイルは非常に高速になりましたが、プロジェクト ファイルをどんどん追加していくと、コンパイル時間が非常に遅くなり始めていました。
現在、65 個のソース ファイルしかないため、毎回コンパイルするのに約 8/10 秒かかります。あまり速くありません。
this oneを除いて、この問題について話している投稿を見たことがありませんが、それは古いバージョンの Xcode 6 でした。
アップデート
Alamofire、Euler、CryptoSwiftなど、 GitHubでいくつかの Swift プロジェクトを確認しましたが、実際に比較するのに十分な Swift ファイルはありませんでした。適切なサイズで開始されていることがわかった唯一のプロジェクトはSwiftHN でした。ソース ファイルは 12 個しかありませんでしたが、同じことを確認できました。1 つの単純なスペースとプロジェクト全体で再コンパイルが必要でした。わずかな時間 (2/3 秒)。
アナライザーとコンパイルの両方が非常に高速な Objective-C コードと比較すると、これは Swift が大きなプロジェクトを処理できないように感じますが、間違っていることを教えてください。
Xcode 6 Beta 7で更新
それでも何の改善もありません。これはばかげたことになり始めています。Swift に がない#import
ため、Apple がこれをどのように最適化できるかは本当にわかりません。
Xcode 6.3およびSwift 1.2で更新
Apple はインクリメンタル ビルド(および他の多くのコンパイラの最適化) を追加しました。これらの利点を確認するには、コードを Swift 1.2 に移行する必要がありますが、Apple は Xcode 6.3 に移行を支援するツールを追加しました。
でも
私のようにすぐに喜ぶな。ビルドをインクリメンタルにするために使用するグラフ ソルバーは、まだ十分に最適化されていません。
まず、関数シグネチャの変更を確認しないため、1 つのメソッドのブロックにスペースを追加すると、そのクラスに依存するすべてのファイルが再コンパイルされます。
第二に、変更がファイルに影響を与えなくても、再コンパイルされたファイルに基づいてツリーを作成するようです。たとえば、これら 3 つのクラスを別のファイルに移動すると、
を変更するFileA
と、コンパイラは明らかに再コンパイルするようにマークFileA
します。また、再コンパイルされますFileB
( への変更に基づいて問題ありません)FileA
が再FileC
コンパイルされるため、ここでは決して使用されないFileB
ため、かなり悪いです。FileC
FileA
だから、彼らがその依存関係ツリー ソルバーを改善してくれることを願っています...このサンプル コードでレーダーを開きました。
UPDATE Xcode 7ベータ5およびSwift 2.0で
昨日、Apple はベータ 5 をリリースし、リリース ノートには次のように記載されていました。
Swift 言語とコンパイラ • インクリメンタル ビルド: 関数の本体だけを変更しても、依存ファイルが再ビルドされることはなくなりました。(15352929)
私はそれを試してみましたが、今では本当に (本当に!) うまく機能していると言わざるを得ません. 彼らは、swift のインクリメンタル ビルドを大幅に最適化しました。
swift2.0
XCode 7 ベータ 5 を使用してブランチを作成し、コードを最新の状態に保つことを強くお勧めします。
Xcode 8.2で更新
この問題に関する私の最後の更新からしばらく経っているので、ここにあります。
私たちのアプリは現在、ほぼ 20,000 行の Swift コードのみで構成されています。Swift 2 と Swift 3 の移行を受けました。2014 年半ばの Macbook pro (2.5 GHz Intel Core i7) でコンパイルするには約 5/6m かかりますが、クリーン ビルドでは問題ありません。
ただし、Apple が次のように主張しているにもかかわらず、インクリメンタル ビルドはまだ冗談です。
小さな変更のみが発生した場合、Xcode はターゲット全体を再構築しません。(28892475)
明らかに、私たちの多くは、このナンセンスをチェックした後に笑っただけだと思います (プロジェクトの任意のファイルに 1 つのプライベート (プライベート!) プロパティを追加すると、すべてが再コンパイルされます...)
この問題に関する詳細情報が記載されている Apple 開発者フォーラムのこのスレッドを皆さんに紹介したいと思います(また、この問題に関する Apple 開発者のコミュニケーションに感謝します)。
基本的に、人々はインクリメンタル ビルドを改善するためにいくつかのことを考え出しました。
HEADER_MAP_USES_VFS
プロジェクト設定セットを追加true
Find implicit dependencies
スキームから無効にする- 新しいプロジェクトを作成し、ファイル階層を新しいプロジェクトに移動します。
解決策 3 を試してみますが、解決策 1/2 はうまくいきませんでした。
この全体的な状況で皮肉なことに面白いのは、この問題に関する最初の投稿を見ると、最初のコンパイルの遅延に達したときに、swift 1 または swift 1.1 コードを使用して Xcode 6 を使用していたことです。Apple からの実際の改善にもかかわらず、約 2 年後、状況は Xcode 6 の場合と同じくらい悪いです。なんと皮肉なことでしょう。
私たちのプロジェクトに Obj/C ではなく Swift を選んだことを本当に後悔しています。(私は AppCode に切り替えますが、それは別の話です)
とにかく、この記事を書いている時点で、この SO の投稿には 32,000 回以上のビューと 143 回のアップがあるので、私だけではないと思います。この状況について悲観的ではありますが、トンネルの終わりに光があるかもしれません。
時間があれば (そして勇気があれば!)、Apple はこれについてのレーダーを歓迎していると思います。
次回まで!乾杯
Xcode 9で更新
今日これにつまずく。Xcode は、現在のひどいパフォーマンスを改善するために、静かに新しいビルド システムを導入しました。ワークスペース設定で有効にする必要があります。
まだ試していますが、完了後にこの投稿を更新します。しかし、有望に見えます。
swift - Swift ファイルのコンパイル時間を出力する
xcodeビルド中にswiftファイルのコンパイルにかかった時間を出力する方法はありますか?
コマンドラインからコンパイルして、xcode と同じビルドをトリガーしたいのですが、各ファイルのコンパイルにかかる時間を含める必要があります。
ファイルごとのReport Navigator
完全なビルド レポートを表示しますが、それらに関連付けられた時間枠はありません。
Swift 1.2 プロジェクトのコンパイル時間を短縮したいと考えています。クリーン後は約 5 ~ 10 分、依存度の高いファイルのソースを変更した後は約 3 ~ 5 分かかります。
c++ - 個々の .cpp ファイルの大規模な C++ ライブラリのコンパイル時間を短縮するにはどうすればよいですか?
現在、500 を超える個別の .cpp ファイルを含むC++ ライブラリを開発しています。これらはそれぞれコンパイルされ、静的ライブラリにアーカイブされます。並列ビルドの場合でも、これには数分かかります。このコンパイル時間を短縮したいと思います。
各ファイルは平均で 110 行で、1 つまたは 2 つの関数が含まれています。ただし、各 .cpp ファイルには対応する .h ヘッダーがあり、これらは多くの場合、多くの .cpp ファイルに含まれています。たとえば、、 、 などA.h
に含まれる場合があります。A.cpp
B.cpp
C.cpp
最初に、コンパイル プロセスのプロファイルを作成したいと思います。何をするのにどれくらいの時間が費やされているかを知る方法はありますか? インクルードガードをチェックしてファイルを無視するためだけにヘッダーファイルを開くのに多くの時間が浪費されているのではないかと心配しています。
そのようなことが原因である場合、コンパイル時間を短縮するためのベスト プラクティスは何ですか?
新しいグループ ヘッダーを追加するつもりはありますが、おそらくこの多数のファイルのレイアウトを変更するつもりはありません。これにより、ライブラリが必要に応じてヘッダーのみのライブラリとしても機能できるようになるからです。