祝・GCC 3.0リリース

■ このスレッドは過去ログ倉庫に格納されています
1さあね
垢版 |
NGNG
 一昔前は、そこらの商用コンパイラよりも良い最適化をする
といわれたGCCも最近は色あせてきてたけど。。。
 待望の新バージョンリリースで巻き返しなるか?

 とりあえずインストールしてみよう
NGNG
>224
最初はIPLをトグルスイッチぱちぱちやって入力した。
227名無しさん@お腹いっぱい。
垢版 |
NGNG
トグルスイッチといえば、
コンパイラではなくOSだがCray社を作ったシーモアクレイは
OSをトグルスイッチでパチパチパッチンと入れて
それがいきなり動いたっていう.本当か?
http://cruel.org/freeware/hdomcorrect.html
GCCと関係ないけど.
NGNG
何でみんな新しいもの追っかけるの?
昔は新しいモノを追っかけてたんだけど、安定してるはずのgcc2.95.2で
glibcをmakeしたら腐ったコード吐いたことがあったので、新しいのは怖くて使えないよ。

結局、egcs2.91.66が一番安心できる。
NGNG
>>224
バベルの図書館で貸し出してます。
VC++は民明書房にあるそうです。
NGNG
>>228
新しいもののほうがナイスな最適化するかもーとか、
C++ の標準準拠っぷりとか、
gcc のパッチを作ってるので仕方なくーとか。

必要ないんなら古いのでいいと思いますよ、ええ。
FreeBSD と NetBSD は gcc-3.x に移行する予定みたいですね。
231名無しさん@お腹いっぱい。
垢版 |
NGNG
バグると不平を言うよりも、進んでバグを出しましょう

…というのがフリーUNIXコミュニティの美徳ではないかと>>228

仕事で使うならstableなものを選択するというのもアリ
NGNG
>>231
バグって不平をいうやつはそこまでのレベル。
233名無しさん@お腹いっぱい。
垢版 |
NGNG
おれbug見つけたら小躍りしながらレポート書いちゃうけどな(・∀・)
NGNG
>>233
あんたは素晴らしい。
俺にはコンパイラのバグなんてさっぱり分からん。
NGNG
>>234
templateで遊んでたらいくらでもinternal compiler error出るぞ
NGNG
>>235
internal compiler errorとか出たらどうやって追いかけてるの?
237名無しさん@お腹いっぱい。
垢版 |
NGNG
>>235
例えばどんなソースだとエラーがでる?
NGNG
>>236

追いかけるのはGCCチームにやらせりゃいいことだろ。
error が出たソースを添付してレポートすりゃいいだけ。
NGNG
gccのソースも読めないやしは半人前。


と言われつづけてはや10年
240名無しさん@お腹いっぱい。
垢版 |
NGNG
10年前の gcc-1.42 がファイル数 281、展開後のサイズ7.7Mだったのが、
gcc-3.2 ではファイル数 14375、サイズ161MB に肥大しているから、
せっかくの10年前にgccのソースを読む機会を逸した奴はもう一生読めないに違いない。
241あぼーん
垢版 |
NGNG
あぼーん
242あぼーん
垢版 |
NGNG
あぼーん
NGNG
>>240 10年前のソースを読めば解決?w
NGNG
今のgccぐらいの規模なら理解できるだろ。
世の中もっと大きなソフトウェアは幾らでもある。
245名無しさん@お腹いっぱい。
垢版 |
NGNG
ここにはgccを理解してる人がいるみたいなので質問させてください。
1. rtl.defやrtl.h,rtl.c
2. *.md
3. -drオプションを指定されたときに吐き出されるファイル
これら三つの関係がいまいちよくわかりません。
簡単でいいのでこれらの関係を教えて下さい。
NGNG
>>245

gcc の info 読もう。
gcc -> Passes `Paasses and Files of the Compiler' のあたり。
NGNG
>>246
それはよく読んだのですが、分からないからここで質問しました
248あぼーん
垢版 |
NGNG
あぼーん
NGNG
>>247
えー その info に十分な情報があると思うけどなあ。

1. RTL を操作するためのユーティリティ関数と、RTL の共通定義
3. コンパイル対象のソースが RTL に変換された直後の RTL の様子
2. insn-flags.h とか insn-codes.h とか insn-output.c とか
insn-attrtab.c とか、とにかくマシン依存のコンパイラソースを
生成するためのソース
NGNG
>>249
おお、ありがとうございます。
なんとなくイメージが掴めました。
教えてもらったことを手がかりに
ドキュメントを読み直します。
NGNG
俺は組込み系やってるのでコンパイラが吐き出したコードを読む機会が多いんだけど、
最適化されるはずなのにうまくされてないような所ってのも、正しく動くけどbugのうちとみなしてレポートしてる
たいていは数日以内にpatch送ってもらえたりするんで、いつでもmakeできるように
gccのソースツリーは展開したまま置いてある。
間違ったコード吐いたりされる場合はさすがにpatch送ってもらうのを待ってるわけにいかんので
レポートするのと同時に自分で治すこともあるけど、簡単に治せるようなものなら良いが
ちょっとややこしくなるともう手に負えん(;´Д`)
252名無しさん@お腹いっぱい。
垢版 |
NGNG
今gcc-3.2コンパイルしてます。
dejagnuのチェックでFAILが出まくってるんだけど、コンパイル失敗ですか?
一応継続してるんですが。
253名無しさん@お腹いっぱい。
垢版 |
NGNG
gcc が Java のバイトコードも吐けるようになるのはいつの日か。
NGNG
>>253 gcj -C で吐くと思われ。
NGNG
Gentoo
NGNG
質問です。
某マシンでgcc使ってるんですけどnewが例外投げてくれません。
PCのgccでも昔は駄目だったんですけど、
3.0では直ってるんでしょうか?
NGNG
>>256
PCのgccを3.0にして試せばいいのでは?
NGNG
>>256
・例外そのものが機能しないのではなく、newだけ?
・昔ダメだったgccのバージョンは?
ぐらいの情報は欲しいなあ。
NGNG
>>218
亀レスだが、英語でいいなら、Modern Compiler Designでいいんじゃない?
ドラゴンブックもぺ─バーバックの奴買っておけばいいし。
Advanced Compiler Design and Implementationも面白いよ。

Appelのは傾向がチョト違う。
>>219も"Garbage Collection: Algorithms for Automatic Dynamic Memory Management"も(w
NGNG
>>224
最初は別の言語で書く。アセンブラまで後退する必要はない。
ちなみに昔はFortranやPL/1で書かれたC compilerがあった。

テメーのcompiler書いても、
gccがあるからgccで簡単にbootstrap、って状況の方が(昔からすれば)異常。
261名無しさん@お腹いっぱい。
垢版 |
NGNG
>>256
少なくともgcc 2.95では、mallocが本当に失敗すればbad_alloc
投げてくれるはず。(cp/new1.cc)
楽観的メモリ割り当てとかで、malloc自体が成功しているからでは?
NGNG
intel 系っつーか PentiumPro 系のハナシですが、
gcc2.95 って妙に速いコード出すことがあるですね。
gcc3.2 や icc より速い。。。
263224
垢版 |
NGNG
> 260さん
ありがとうございます.それはそうなのでしょうけど,
(最初にCを作った人は"Cで書いてコンパイルしたC Compiler"
がそれこそ世界になかったわけですから!)
その "FortranやPL/Iで書いたC Compiler"を作るための
"FortranやPL/IのCompiler"をやはり作らなければいけませんよね...
でも教えてばっかりでもなんだか悪いのでいろいろ調べてみます。
どう考えても最初は簡単な(機能が少ない)言語Aをアセンブリ言語で書き、
その言語Aを使ってもうちょっと高水準の(機能が多い)言語Bのコンパイラ
を書く.-> 以下同文 とやっていったのだとは思いますが.
NGNG
つーか、別にアセンブラだけで(機械語だけでさえも)
Cコンパイラ作れるんですが。
265名無しさん@お腹いっぱい。
垢版 |
NGNG
>>263
理論的には可能であるとしても、
アセンブラで書いたC compilerは山田かつて見たことがない。

> hogecc-1のsourceはどうやってcompileしたんでしょう?
> 最初は誰かえらい人がアセンブラで書いてくれた.位しか

よって>>260ではこの行間の話をした。以上。
NGNG
リッチーさんが最初にPDP-7上で書いたCコンパイラは、アセンブラだったのでは。
NGNG
PDP-11に移植してからだったか?
NGNG
>263
> 以下同文とやっていったのだとは思いますが.

で、結局 >>226 まで遡ると。
NGNG
dmrセンセイはBでCを書いたんじゃないの?
NGNG
アセンブラの登場はFortranコンパイラよりも後のはず。
NGNG
Unixの歴史とかの書籍を見ると
「コンパイラコンパイラ」
ってのがあったらしいが...
....一番最初はどうだったんだろう。
謎、謎。
NGNG
yacc?
273名無しさん@Emacs
垢版 |
NGNG
libungif コンパイルできねー
NGNG
@ gcc-3.2
NGNG
>>266-267
gcc は yacc/bison が無いと動かないよね
yacc/bison は C で書かれているよね
。。。
NGNG
>275
最初のCコンパイラはgccではないわけだが...
277名無しさん@お腹いっぱい。
垢版 |
NGNG
g++ 3.2 で ostream_iterator が未定義だといわれるんだが。

% cat foo.cpp
#include <ostream>
#include <string>
int main()
{
std::ostream_iterator<std::string> *i;
}

% g++ -dumpversion
3.2

% g++ -c foo.cpp
foo.cpp: In function `int main()':
foo.cpp:5: `ostream_iterator' undeclared in namespace `std'
foo.cpp:5: parse error before `>' token
NGNG
#include <iterator>
279277
垢版 |
NGNG
サンクス。
標準では <iterator> なのか。やっぱり古い知識のままじゃいかんなぁ。
280名無しさん@お腹いっぱい。
垢版 |
NGNG
gcc をビルドしてできる libstdc++.so.5 とかは、どこにインストール
すべきものなんでしょうか。
configure --prefix=/usr/local/gcc-3.2 とかでビルドして make install
すると、/usr/local/gcc-3.2/lib/ の下にインストールされるのですが、
g++ 3.2 で作成した実行ファイルを起動すると、libstdc++.so.5 が
見つからない、と言われてしまいます。
NGNG
OS は?
ldconfig とか、LOAD_LIBRARY_PATH とか?
282あぼーん
垢版 |
NGNG
あぼーん
NGNG
>280
リンク時に
g++ -Wl,-rpath -Wl,/usr/local/gcc-3.2/lib
と書いておけば? specs ファイルでも指定できるかもしれんが。
284280
垢版 |
NGNG
アドバイス、ありがとうございます。
>>281
Linux 2.2 です。
ldconfig とか LOAD_LIBRARY_PATH とかは、とく使ってませんでした。
man を見ると、ldconfig で解決できそうな感じがします。

>>283
これは、スタティックリンクをするときの話でしょうか。できれば、
実行時にリンクを解決したいのです。
NGNG
ダイナミックリンクする場合の指定方法だよ
286280
垢版 |
NGNG
libstdc++ の件は
# echo /usr/local/gcc-3.2/lib >> /etc/ld.so.conf
# ldconfig
で解決しました。

g++ 3.2 で別の問題なんですが、std::wstring を使おうとして、

#include <string>
int main() { std::wstring s; return 0; }

をコンパイルしたら、

/tmp/ccSgXbtC.o: In function `main':
/tmp/ccSgXbtC.o(.text+0x17): undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string[in-charge]()'
/tmp/ccSgXbtC.o(.text+0x22): undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::~basic_string [in-charge]()'

のようなリンクエラーが出ました。もともと普通にビルド&インストール
しただけでは wstring が使えないので、c++config.h で
#define _GLIBCPP_USE_WCHAR_T 1
として (無理やり?) 使っていたのですが、3.0.4 あたりではうまくいって
いたのに、3.2 では上のようなエラーが出るのです。
これは、3.2 の basic_string では、メンバ関数がインライン展開されずに
別モジュールとしてコンパイルされているんですかね。
287280
垢版 |
NGNG
なんと、basic_string クラスのインスタンス自体が外部宣言されていました。
gcc-3.2/include/c++/3.2/bits/basic_string.tcc:
extern template class basic_string<wchar_t>;
gcc じゃ、こんな書き方ができるのか。
で、ビルド時には _GLIBCPP_USE_WCHAR_T が undef になっていたので、
ライブラリには、wstring の実体が作られていないのでしょう。自前で
template class std::wstring;
とやってやれば、うまいことリンクできました。
ところで、ビルド時から _GLIBCPP_USE_WCHAR_T を有効にするには
どうすればいいんでしょう。
288280
垢版 |
NGNG
結局、システムに入っていた glibc が古くて wchar_t 関係の
関数がそろっていなかったのが原因のようですね。現在、
glibc-2.2.5 をビルド中。
289名無しさん@お腹いっぱい。
垢版 |
NGNG
g++3で書いた中身C++、インターフェースCなライブラリを、g++2
から利用する(またはその逆)ための、良い方法は無いでしょうか?
普通にやろうとすると__dynamic_castなどが衝突するので、
リンカ側で色々工夫をする必要があるようなのです。
FreeBSDで、-symbolicなどを駆使して、一応例外などを
動かすことはできましたが、とてもポータブルとは思えない
ので、もっと正しい方法があれば教えてください。
290名無しさん@お腹いっぱい。
垢版 |
NGNG
64bit Solaris 8でgcc 3.2をコンパイルできた人いますか?
Companion CDで入る/opt/sfw/bin/gcc (2.95.3)を使って
やっているのですが(make checkの)エラーが消えません。

$ /usr/local/bin/tar xvfz gcc-3.2.tar.gz
$ cd gcc-3.2; mkdir objdir; cd objdir
$ echo $PATH
/opt/sfw/bin /usr/bin /bin /usr/ccs/bin /usr/local/bin
$ ../configure --enable-languages=c,c++ --with-as=/usr/ccs/bin/as
--with-ld=/usr/ccs/bin/ld --disable-nls
$ /usr/local/bin/make bootstrap (Errorは出ません。)
$ echo $TCL_LIBRARY
/usr/local/lib/tcl8.4
$ echo $DEJAGNULIBS
/usr/local/share/dejagnu
$ /usr/local/bin/make -k check | tee check.log
で,check.logからサマリ部分だけ抜き出すと、

291名無しさん@お腹いっぱい。
垢版 |
NGNG
=== libstdc++-v3 Summary ===

# of expected passes 407
# of unexpected failures 2
# of unexpected successes 10
# of expected failures 16

=== gcc Summary ===

# of expected passes 18688
# of expected failures 66
# of unsupported tests 111

=== g++ Summary ===

# of expected passes 7248
# of unexpected failures 3
# of expected failures 88
# of untested testcases 21
# of unsupported tests 4

bootstrapまでは通っているけどtestsuiteのC++関連の
unexpected failuresがあるのが不安です。
http://gcc.gnu.org/gcc-3.2/buildstat.htmlを見ると
(Test resultsでエラーがある人もいるけど)Successfulの
人もそれ以上に結構いて、なんで私のだけエラーが出るのかと...
292名無しさん@お腹いっぱい。
垢版 |
NGNG
$ cd gcc/
$ for file in *.o ; do cmp $file stage2/$file; done
でのstage2とstage3の比較はOKのようなのですが...
そもそもtestsuiteでunexpexted failuresが0になるものでしょうか。
gccをsourceからbuildするのは初めてなのでよく作法/流儀が...
Package版があるようなのでそっちを入れた方がいいんでしょうか。
NGNG
gcc3.xをメインに使わないやしは氏ね
294名無しさん@お腹いっぱい。
垢版 |
NGNG
gcc 3.2.1
http://gcc.gnu.org/gcc-3.2/changes.html
NGNG
gcc-3.2でperl-5.6.1がmake出来ない(´・ω・`) ショボーン
NGNG
>>295
もしよければ詳細キボンヌ



gcc-3.2は最適化でバグがあるらしいね…「-fno-strength-reduce」を追加して対処
した方がいいらしい(Vim-6.1のパッチ260より)

gcc-3.2.1ではfixされているのかな?
297295
垢版 |
NGNG
これと同じ ttp://archive.develooper.com/perl5-porters@perl.org/msg84835.html
パッチあったんで助かったYo!
NGNG
>>296
なるほど、これか
ttp://archive.develooper.com/perl5-porters@perl.org/msg84893.html

Thanks
299名無しさん@お腹いっぱい。
垢版 |
NGNG
ttp://www.coyotegulch.com/reviews/intel_comp/intel_gcc_bench2.html
300名無しさん@お腹いっぱい。
垢版 |
NGNG
propolice の特許?
特開 2001-216161
http://www2.ipdl.jpo.go.jp/BE0/index.html
で 検索汁
NGNG
>>300

一部に衝撃が走り中(w
NGNG
正式書類にはこう書くのか(藁
インターナショナル・ビジネス・マシーンズ・コーポレ−ション
NGNG
>>300
使ってもお金とられなきゃ特許でもいいや…
NGNG
泳がせておいて後で回収と言うunisys方式もあるよ。
305名無しさん@お腹いっぱい。
垢版 |
NGNG
特許を申請した理由が知りたい…
日付からするとパッチを公開した時期なのかな?
NGNG
特許申請しないと公開させてもらえなかったのかも。
特許の文書もやけに教育的だし。
307名無しさん@お腹いっぱい。
垢版 |
NGNG
特許は申請じゃなくて出願するもんだろう。
308あぼーん
垢版 |
NGNG
あぼーん
309名無しさん@お腹いっぱい。
垢版 |
NGNG
みなさん、リリース間近の3.3は試していますか?
310名無しさん@お腹いっぱい。
垢版 |
NGNG
propolice開発者です。GCCに提出している部分はGPLとしていますから、この部分に関して特許の心配はありません。
但し他のコンパイラ製品には適用されます。
このスレッドは見ているわけではないので、できれば私宛にメールを送ってください。アドレスはホームページから探してください。
311名無しさん@お腹いっぱい。
垢版 |
NGNG
>>310
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
NGNG
>Support for thread local storage has been added to the IA-32 and x86-64 ports.

ほう。port限定だけど3.3でTLSサポート入るのか。

>IBM ROMP, romp-*-*
>IBM大騒ぎ、romp-*-*

(´∀`)
313nobody
垢版 |
NGNG
TLS サポートって TLS をどうサポートするんだろう?
下校できるとか
NGNG
>>313
True Love Story カヨ
315名無しさん@お腹いっぱい。
垢版 |
NGNG
3.2.1いい感じだね。
安定してきた感じ。
NGNG
そろそろ、全面的に3を採用してもいい頃なんじゃないかねえ。
Cに関しては移行についての問題も少なそうだし。g++がなあ
2.XXはおかしいから早いところなくなって欲しいのだけど。
317名無しさん@お腹いっぱい。
垢版 |
NGNG
祝 Debian sid で gcc = gcc-3.2 化
NGNG
これで、開発系は全部がgcc-3.2になったのかな?
NGNG
>>318
まあ、Linux-2.5.54 は Documentation/Changes では
The recommended compiler for the kernel is gcc 2.95.x (x >= 3), and it
should be used when you need absolute stability. You may use gcc 3.0.x
instead if you wish, although it may cause problems. Later versions of gcc
have not received much testing for Linux kernel compilation, and there are
almost certainly bugs (mainly, but not exclusively, in the kernel) that
will need to be fixed in order to use these compilers. In any case, using
pgcc instead of plain gcc is just asking for trouble.
なんて書かれてはいるけどね。
NGNG
vim 6.1のconfigureにもこんなのがあるなぁ。

if test "$gccversion" = "3.1" -o "$gccversion" = "3.2" -o "$gccversion" = "3.2.1" && `echo "$CFLAGS" | grep -v fno-strength-reduce >/dev/null`; then
echo 'GCC 3.1 and 3.2 have a bug in the optimizer, adding "-fno-strength-reduce"'
CFLAGS="$CFLAGS -fno-strength-reduce"
fi
321名無しさん@お腹いっぱい。
垢版 |
NGNG
http://pc3.2ch.net/test/read.cgi/tech/1007731543/855-856

わくわく。
322296
垢版 |
NGNG
>>320
ま、3.2.1でも3.2と同様問題がある…ということですか ショボーン
NGNG
>>322
ちなみに、debian sid 標準なのは pre-release な 3.2.2。2003-01-09 版。
324山崎渉
垢版 |
NGNG
(^^)
325名無しさん@お腹いっぱい。
垢版 |
NGNG
3.3ってどうよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況