GCC、CからC++への移行が完了 102
ストーリー by headless
完了 部門より
完了 部門より
hylom 曰く、
GCCをC++で再実装する「cxx-conversion」のマージがすべて完了した(Merge from cxx-conversion branch、 本家/. )。
これにより、GCC自体はC++コンパイラーのみでビルド可能となる。ただしコンパイラーの機能に関しては変更されておらず、これまで通り使用することが可能とのことだ。
C++コンパイラーのみでビルド可能となる (スコア:1)
「これまでCコンパイラーのみでビルド可能だったが、C++コンパイラーが必要になる」の間違いじゃないの?
Re:C++コンパイラーのみでビルド可能となる (スコア:2)
わたしがGCCをビルドしていたのは10年以上前なのでピント外れなことをいっているかも知れないけど、当時、GCCがコンパイルできる環境やCコンパイラは少なかった。つまり、特にポータビリティが高いわけではなかった。事実上、それなりに新しい、余力のあるUnixシステムじゃなければ、ポートにはかなりの作業が必要だった。それをする人がいなくなれば、対応システムからハズされるだけ。
それなりに新しいUnixシステムなら、GCCなり、それなりのC++が搭載されているだろうから、GCCがC++で書けていても、特に問題にならない。
以前のように、リアルタイムシステムのようなサードパーティのシステムが豊富にある状況じゃないし、独自のコンピュータのベンダーも減ったしね。Sony NEWSもOMRON LunaもDECもSGIもない。やっぱり、大きな問題はないね。つまらないけど、それが現実。
Re:C++コンパイラーのみでビルド可能となる (スコア:1)
シグマでもポートできたんだよ。今は新型アーキテクチャーとかまずgccのcross tool chain作るからあんまカンケー無いんだろうけどRe:C++コンパイラーのみでビルド可能となる (スコア:1)
> 1- The compiler can only be built with a C++ compiler.
「C++コンパイラーでのみビルド可能」の誤訳。
タレこみ時点 [srad.jp]では
> ビルドの際に必ずC++コードを利用するようになる。
で、少なくとも嘘ではなかったのに、headlessェ…
bootstrapはどうなるの? (スコア:0)
gccのソースをコンパイルできるくらいまともなC++コンパイラって数えるほどしかないような
Re:bootstrapはどうなるの? (スコア:5, おもしろおかしい)
1. まずclangをビルドします。
2. gccをビルドする必要がなくなったので終了
Re:bootstrapはどうなるの? (スコア:1)
1. まずclangをビルドします。
2. gccをビルドする必要がなくなったので終了
BSD界隈なんかに、こういう勘違いしている人が多いけど
実際にはclangはLLVMに依存しているし、LLVMはgccに依存している
ゆえにgccへの依存は消えない
ほぼ全てのCコンパイラで自身をビルドできるgccのbootstrapの話してるところに
LLVMが無ければ自身を作ることさえできないclangを持ち出すとか
なにを勘違いしてるんだか・・・・・・・・・・・・
# LLVMが不要なclangか、gccが不要なLLVMができると良いね(棒読み)
Re: (スコア:0)
これは初耳なんですけどそうなんですか?
llvm-gcc の勘違いじゃなくて?
Re:bootstrapはどうなるの? (スコア:3)
詳細は http://llvm.org/docs/GettingStarted.html [llvm.org] あたりに書いて有りますが,
llvm はバイトコードから native code を作るときに GCC を使います.
そのためllvmのビルドにもGCCが必要です.
厳密にはGCCじゃなくても,solaris の cc のようなCコンパイラがあればビルドできますが
>1. まずclangをビルドします。
>2. gccをビルドする必要がなくなったので終了
というのはありえない話で,1の時点でCコンパイラがすでに使える状態になっています.
Re:bootstrapはどうなるの? (スコア:1)
clang は C++ で記述されていますので、「C++コンパイラを手に入れるには」の第一歩でclangが出ている時点でおかしいんですよ。clangがビルドできるなら、そこにC++コンパイラが既にあるってことです。
ジョークとしても微妙に中途半端なネタ…
Re: (スコア:0)
いろいろと勘違いしているよ
Re: (スコア:0)
clangをclang-llvmでコンパイルできます?
なんか失敗する。
Re: (スコア:0)
clangじゃアーキテクチャ間の移植性がまだ弱いからgccの代わりにはならないよ
Re: (スコア:0)
Re:bootstrapはどうなるの? (スコア:3)
ここでGCC 4.7が登場するのは、たんにC++移行前Cで書かれた最後のバージョンということ以上の意味はないと思います。なので、そこでbootstrapするのは別に4.6でも4.5でもとりあえず完遂できるのではないでしょうか。
Re:bootstrapはどうなるの? (スコア:3)
http://gcc.gnu.org/codingconventions.html#Portability [gnu.org] によれば、C++03を「使ってもいい」ということらしいので、C++03対応は必須、という事になりますかね。 http://gcc.gnu.org/ml/gcc-patches/2012-08/msg01223.html [gnu.org] あたりからのスレの流れも気になりますが、時期的にはgcc3.4とか3.3でも対応していそうな気がします。
-- Takehiro TOMINAGA // may the source be with you!
Re:bootstrapはどうなるの? (スコア:1)
gccのソースだけが手元にあるところから、徒手空拳でgccのバイナリを得るまでの手間が大幅に増えちゃったというか。 今までなら「頑張ってCコンパイラをアセンブラで書け」だったのが「頑張ってC++をアセンブラで書くのは・・・流石に無理だから、Cで書かれた別のC++コンパイラのソースを探せば?」に、ブータビリティ(とか、試しに呼んでみる)が大幅後退しちゃうので。
まあ、そんな心配は妄想上の産物だからこそ、C++で書かれることになったんでしょうけど。「gccをコンパイルできるCで書かれたC++コンパイラ」のソース(以前のgcc?)を常にセットで置いておけば、ほとんど何も変わりませんし。
ただまあ、変な例えだですが、「この車はドライブバイワイヤ採用なので、ハンドル←→前輪、はシャフトでは直結してなくて、モーターで遠隔で動かしてます」と言われたときに感じる「え? いざというとき大丈夫?」感に近いもやもやした気分です。テクノロジの進化でむしろ利点の方が大きくなってるのは理屈では分かるんだけど、そこは直結しといて欲しい! 感覚として! みたいな?
Re:bootstrapはどうなるの? (スコア:1)
PC上のバイナリに限れば、もうちょっと簡単に実験できそうですが。生のPC1個と、何かのOSのディストリビューションの全ソースが与えられて、そのOSを一番早くコンパイルして起動できた人が勝ちな大会とか。
それだと最初何も出来ないなら、ディップスイッチ→ROMライタみたいなのは用意するとか、細かくはなんかまあ、大会が面白くなりそうなレギュレーションを考えるとして。
Re: (スコア:0)
クロスコンパイルでターゲット用のバイナリを最初に作れば良いだけじゃないか?
ターゲット用の環境でコンパイルして動かしたら自動的にターゲット用のバイナリを出力するわけじゃないぜ?
必要性があったの? (スコア: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: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)
> 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:必要性があったの? (スコア:1)
今後出てくる最適化がどれくらいの効果を発揮するかなんて、知ってる人いるのか?
1を聞いて0を知れ!
Re:必要性があったの? (スコア:1)
いろんな組み合わせを、ブルートフォースで試すのだったら、CでもC++でもあんまり変わらないだろうね。そんなバカなことはしないだろうけど。
1を聞いて0を知れ!
Re:必要性があったの? (スコア:1)
じゃあ、いろいろ工夫する場合に、C++にしたことによる効果が現れるんじゃないの?
1を聞いて0を知れ!
Re:独り言 (スコア:1)
×全てのプログラムが実装が簡単なC言語で始まりC言語で終わるのが極楽浄土だと思っております。
○全てのプログラムが実装が簡単なUCSD Pascal/P-code systemで始まりUCSD Pascal/P-code systemで終わるのが極楽浄土だと思っております。
Re:独り言 (スコア:1)
FORTH
一説には全てのCPUアーキテクチャにおいて最初に移植される言語だとか.
# 速くて移植性はあるけど, これで大規模なプログラムを書くのは困難.
Re:独り言 (スコア:2)
> 簡単に言えば、テンプレートは安全な自動コピペです。
という言明はテンプレートがコピペの一種であることを
全く否定していない。
文章の推敲が足りんね。
出GPL3 (スコア:1)
BSD界隈というより, 組み込み関連のGPL3に引っかかりそうな所が, 脱出先を模索しているんじゃないかと.