アカウント名:
パスワード:
今回追加のnonnullってのは微妙に便利そうですね。でもこういう どうでもよさげなGCC拡張って、どういう基準で追加を決定して るんでしょう。
C++ でも C 同様の効果が得られますよ。 プリプロセスして、その得られたソースコードのハッシュを キーにして以前コンパイルしたオブジェクトファイルを 取り出すんですから。.ccache ファイルの中を nm なりなんなりしてみたらわかるかと。
公式サイト [samba.org]の最初の段落を訳してみると…
ccache ってのは "compiler cache" です。 こいつは C/C++ コンパイラのプリプロセッサとして働きます。 コンパイラの -E オプションとハッシュを 使ってコンパイルする必要があるかどうかを調べることができます。 これはしばしば標準的なコンパイルを 5 から 10 倍の速度にします。
てなところですかね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
C++はあまり変化なしか? (スコア:0)
今回追加のnonnullってのは微妙に便利そうですね。でもこういう どうでもよさげなGCC拡張って、どういう基準で追加を決定して るんでしょう。
Re:C++はあまり変化なしか? (スコア:0)
Re:C++はあまり変化なしか? (スコア:5, 興味深い)
ccache を使うと、コンパイル時間が結構削減できます。
どれくらい速くなるかは、webにある表を見てください
使い方も簡単で
CC=gcc を
CC=ccache gcc
に変えるだけです。gccのバージョンには依存しません。
gcc自体がpre-compileの機能をサポートしてくれるまでの
つなぎとしては十分に使えると思います。お試しを。
PCH と ccache (スコア:1)
ccache というソフトウェアの存在を初めて知ったのですが、 Web ページを見たところそんなことができるとは思えないのですが……。
Web ページを読んだ限り、 ccache というのは、 Makefile を正しく書くのが大変な場合などに make に頼らずに(毎回 clean build するだけで)不要なコンパイルを省き make とほぼ同じ効果を得るために使うもののように見えます。 PCH とは関係がないのでは?
鵜呑みにしてみる?
Re:C++はあまり変化なしか? (スコア:1)
#defineやテンプレートなどのマクロ系の機能にとって、
キャッシュしときたい情報が何なのかというと、
「処理前」のデータをキャッシュしても駄目(それじゃソースそのまんまだから当然)だし、
「処理後」のデータをキャッシュしても駄目(マクロに毎回違うパラメータを与えられるたびに無意味になる)である、
…という点が問題なわけです。
だから、プリプロセスの「途中」の段階を、キャッシュしとかないとならない。
パーサーの内部状態みたいな、半完成の情報を。
まあ、それでも相互依存性が高いクラス同士になると、PCHですら十分じゃない、ということがあるようですが。
#クラスをちょっと直すたびにコンパイルが1時間、ってな世界はもうウンザリなのでG7
#C++みたいに埋め込みObject方式の選択肢があると、中間形式にとっても変更コストが大きいみたいですね。
##delphiならクソでかいアプリのコンパイルでも1分かかることは稀、大抵数秒、という世界なので、その生産性の違いたるや…
元を正せば、コンパイラが「最初から」そういう中間情報をファイルに落とすってのをきちんとやるべき
なんでしょうけど、Cだとそれが文化的(?)に後回しになるようですね。
今時の言語はDelphi(笑)にせよJavaにせよ、コンパイル結果のファイルにヘッダ相当の情報が
(後からコンパイラが素早く読みやすいように)入ってるっぽいし、依存関係の解決ももう少しスマートにやれるようになってるっぽい。
#リンカに渡す-lの「順番」を自分で解決するのはもうウンザリなのでG7。順番なんざ機械が内部的に面倒見ろ。javaみたいに。
Re:C++はあまり変化なしか? (スコア:0)
Re:C++はあまり変化なしか? (スコア:0)
C++ の場合、山のようにある class 定義を .cc ファイルごとに
毎回読むから遅くなるのであって、それと比べれば CPP の
オーバーヘッドは感覚的には大したことはないです。
Re:C++はあまり変化なしか? (スコア:2, 参考になる)
C++ でも C 同様の効果が得られますよ。 プリプロセスして、その得られたソースコードのハッシュを キーにして以前コンパイルしたオブジェクトファイルを 取り出すんですから。.ccache ファイルの中を nm なりなんなりしてみたらわかるかと。
公式サイト [samba.org]の最初の段落を訳してみると…
ccache ってのは "compiler cache" です。 こいつは C/C++ コンパイラのプリプロセッサとして働きます。 コンパイラの -E オプションとハッシュを 使ってコンパイルする必要があるかどうかを調べることができます。 これはしばしば標準的なコンパイルを 5 から 10 倍の速度にします。
てなところですかね。
Re:C++はあまり変化なしか? (スコア:0)
という気がするんですけど、気のせいかな……
いずれにしろ、pch の導入の最大の目的である、C++ のクラス定義の
キャッシュにはならない気がしますけど。
Re:C++はあまり変化なしか? (スコア:3, 参考になる)
3.4では他にもC++パーサの書き直しなども行われているようです。
Re:C++はあまり変化なしか? (スコア:0)
# PCH = pre-compiled header