by
Anonymous Coward
on 2012年08月18日 21時20分
(#2214448)
Migrating GCC to C++ as implementation language:
C++ is a standardized, well known, popular language. C++ is nearly a superset of C90 used in GCC. The C subset of C++ is just as efficient as C. C++ supports cleaner code in several significant cases. C++ makes it easier to write and enforce cleaner interfaces. C++ never requires uglier code. C++ is not a panacea but it is an improvement.
必要性があったの? (スコア:0)
C++で記述し直すことによりメンテナンスがしやすく成るとか性能が上がるとかいった利点が有ったのでしょうか?
C++コンパイラは実質的にCコンパイラも内包しているので言語の陳腐化等も問題にはならないと思うのですが
C++とCは互換ではないです (スコア:1)
dodongaです。
> C++コンパイラは実質的にCコンパイラも内包しているので
良くある勘違いです。
C++とCは互換ではないです。
閑話休題
Re: (スコア:0)
Cが内包されていない、もしくはほかで置き換えることが出来ない点ってどんな点?
いやまあ、ペダンティックな話じゃなくて、GCCについてなんだけど
Re: (スコア:0)
C99のDesignated Initializer
GCCに限らないです (スコア:0)
dodongaです。
C++とCは互換ではないです。
1) サイズの問題
sizeof('a');
2)スコープの問題
int x[100];
void f()
{
struct x { int a; };
sizeof(x);
}
const の扱い
省略時の扱い int f(void) とint f()
挙げればキリがなくw
閑話休題
Re:GCCに限らないです (スコア:2)
話がずれてますよ。
確かに「C++言語の言語仕様は、C言語と互換性がない部分がある」のは事実です。ですが、元コメは
と書いてます。言語仕様ではなく処理系が論点。
実際のところC++の言語処理系は、C言語モードでのコンパイルが可能なものばかりです。C言語としてのコンパイルができないC++専用コンパイラって見たことありません。
だから、C++で書かれたコードがビルド出来る環境なら、Cで書かれたコードもビルド可能。
そういう点で、コメの疑問であるビルド環境の普及度という点では、CからC++への移行へのメリットはないですね。
最大の利点はソースコードの保守性の問題でしょうな。
Re: (スコア:0)
逆にいえばこの程度という感じですね、Cで書く時に両方で通るようにコードした方が色々便利になりそうだし多分そうするかな
もっとも、もうC++移行済みでさらにC++撤退してC# and Java に行ってしまいましたが(^^;
Re: (スコア:0)
注意して書けば互換になる程度だね
きり無いってほどでない
Re: (スコア:0)
で、そういう違いがあることで一体どんなメリットが生じるのかな?
Re:GCCに限らないです (スコア:1)
答えが求められているものではないようにも思えるけど、一応答えてみた。
そもそも、そんなことよりもvoid*から他のポインタ型への暗黙変換がC++にはないこと(これは安全性の強化という理由)のほうがC→C++での移植では経験上よく引っかかる。あるいは、名前マングルの問題(ようはextern "C")もよくある。
Re: (スコア:0)
C++標準化委員会にでも聞いてろよ
Re: (スコア:0)
GCCは以前からCコンパイラではない
コンパイラを呼び出すドライバだ
Re: (スコア:0)
つまりCなりC++の差は実質問題ないってこと?
Re: (スコア:0)
1.CとC++は全く違う
2.GCCがCで記述されていたのがC++に変わる
3.なんで書いてあっても良い
この3つに要約される
Re:C++とCは互換ではないです (スコア:2, 参考になる)
Migrating GCC to C++ as implementation language:
C++ is a standardized, well known, popular language.
C++ is nearly a superset of C90 used in GCC.
The C subset of C++ is just as efficient as C.
C++ supports cleaner code in several significant cases.
C++ makes it easier to write and enforce cleaner interfaces.
C++ never requires uglier code.
C++ is not a panacea but it is an improvement.
Re: (スコア:0)
大抵のC++コンパイラは、オプション等で明示してやればCコンパイラとして動作する。
これを指して「C++コンパイラはCコンパイラも内包している」と言ってるのだと思われ。
Re: (スコア:0)
ほとんどのコンパイラがC/C++になってる(もちろん専用もある)ので、そういうことかな?
大概はちゃんとオプション指定すべきだが、ソースからオブジェクト生成の時に拡張子で処理わけたりするので、問題が表面化しない?
Re: (スコア:0)
コメントを書く時は、自分の個人情報を晒しても同じことを書けるか考えたほうが良いです。
そうじゃないと、無駄に攻撃的な「匿名の卑怯者」になってしまうので。
Re:C++とCは互換ではないです (スコア:1)
良い意味でも悪い意味でも
「この人は芯が通ってるんだな」
と感じますね。
Re: (スコア:0)
内容が不適切でなくても、芸風というものがあるのでね
ACと本名とペンネームでは書けることが異なる
Re: (スコア:0)
心掛けとして、だね。
決して、自らを明かすならどんな悪質な発言も可、というわけではない。
Re: (スコア:0)
まったくどっかの市長は匿名の卑怯者に言いがかりばかりつけられて大変ですね。
個人情報を晒していれば所属組織や上司経由で圧力をかけられるのに。
Re: (スコア:0)
> C++で記述し直すことによりメンテナンスがしやすく成るとか性能が上がるとかいった利点が有ったのでしょうか?
メンテナンス関係以外は思い浮かばないですねー。
吐き出すバイナリは原則同じでしょうし、性能(←これってコンパイルに要する時間ですかね)は、最大限頑張って”C”実装と同等になるかもしれないけど、まずそうはならないでしょう。(-_-;;
私はアプリ屋なんですが、普段は”C++”で書いていて、”C”で書くことはもうほとんどありません。なんというか書いているアプリの複雑さが”C++”を使うことが前提になっちゃてて、もう”C”で書ける気がまったくしないんですよね。
コンパイラ屋さんも、とうとう「”C”でのメンテナンスは厄介だ!」的な気分になってきたとか?
Re:必要性があったの? (スコア:5, 興味深い)
この辺を改善したくても黒魔術コードを綺麗に書き換えるのが大変すぎた、というのが今までのネック。C++化でこの辺りの改善がやりやすくなれば、性能(コンパイルにかかる時間)は改善する可能性が高い。
また例えば命令の並び替えとかの最適化を限界まで頑張ると組み合わせが爆発するので、メモリ使用量が爆発してしまって途中で足切りするわけだけど、この辺もより限界まで総当りチェックとかがしやすくなり、出力されるバイナリの実行性能も改善する可能性がある。
以上、まあ、一応公的な意見はこんなもんらしい。
出先なのでAC
Re: (スコア:0)
> 性能(←これってコンパイルに要する時間ですかね)は、
実行時の性能に決まってるだろ。いくら根拠のないデマでC++をdisりたいからって曲解にもほどがある
Re: (スコア:0)
出力したバイナリが実行時に速いということなら意味が通らないよ。
”C++”実装のコンパイラでそういうバイナリが出力できるなら、
”C”実装のコンパイラでもまったく同じバイナリが出力できるだろ。
Re:必要性があったの? (スコア:1)
ものがコンパイラだけに話がややっこしいですね。
1. C++コンパイラがgccをコンパイルするのにかかる時間
2. C++でコンパイルしたgccが何かをコンパイルするのにかかる時間
3. C++版gccでコンパイルされたものが何かを処理するのにかかる時間
何よりも先に、どれについて話しているか明確にした上で話し始めないと会話が成立しなさそうです。
それはさておき、もしC++化によって(2)が高速化して、
その結果、時間がかかるけど効果がある最適化手法が使えるようになって
そのうち(3)も高速化されるといいですね。逆パターンもあり得ると思いますが。
Re:必要性があったの? (スコア:1)
けれど、C++で実装するのとCで実装するのでは、手間が全然違うだろ?
論理上は同じものが書けるとしても、現実的に非常に手間がかかる場合は、「現実的には同じものは書けない」と言える。
極論するなら、今のgccと同等のバイナリを、バイナリエディタ直打ちで書ける神はいるか?
1を聞いて0を知れ!
Re: (スコア:0)
「現実的には、出力バイナリの実行時性能に差が出るほどには違わない」となる可能性のほうが高いのでは?
コンパイラの最適化に目に見える程に差が出るためには、どれくらいの高速化が必要?
実装をC++に変えてコードの整理がし易くなったして、最適化に違いが出るほどの高速化ができる気がしない。
…「実用上はたいして違わない」という考え方もあると思うけどね。
Re:必要性があったの? (スコア:1)
今後出てくる最適化がどれくらいの効果を発揮するかなんて、知ってる人いるのか?
1を聞いて0を知れ!
Re: (スコア:0)
いやいや「コンパイラの実装をC++に変えてコードのメンテナンスが行い易くなって、コンパイラ自体のメモリ効率と実行効率が良くなることによって、組み合わせ爆発するCPU命令の組み合わせをどれくらい試せるようになるか?」の話でしょ。一般的な最適化の話じゃなくて。
↑この話に限定すればハードルはけっこう高いと思うが。
Re:必要性があったの? (スコア:1)
いろんな組み合わせを、ブルートフォースで試すのだったら、CでもC++でもあんまり変わらないだろうね。そんなバカなことはしないだろうけど。
1を聞いて0を知れ!
Re: (スコア:0)
> ブルートフォースで試すのだったら、
いや、基本でしょ。いろいろ工夫はあるかもしれないが。
というか、オーダーで判断するならむしろ基準になるんじゃね。
Re:必要性があったの? (スコア:1)
じゃあ、いろいろ工夫する場合に、C++にしたことによる効果が現れるんじゃないの?
1を聞いて0を知れ!
Re: (スコア:0)
> 性能(←これってコンパイルに要する時間ですかね)は、最大限頑張って”C”実装と同等になるかもしれないけど、まずそうはならないでしょう。(-_-;;
またC信者のデマか。たとえばCでは使えない関数オブジェクトのほうが関数ポインタより高速。単なる原理的な話ではなくgccやllvmクラスなら間違いなく実際に高速なコードを吐く。