の一人、David R. Musser 教授の授業をいま大学院でとっているんですが、教授は 1971 年(!)頃から Generic Programming という概念を研究していたそうです。1987 年にはその成果を Ada のライブラリとして実装したものの、あまり広まらなかったそうです。その後 C++ のライブラリとして実装した STL は注目を集め、ついには C++ の標準ライブラリに採用されました。STL のような考え方って C++ が生まれる前からあったんですね。
僕はこの授業をとるまではバリバリの C プログラマだったので、C++ に STL とおぼえることが多くてちょっと苦戦しています。
# 今日その授業のテストだったのですが、かなりだめでした‥。
以前 C でコンテナを書いたときは、どうしても、データを void* で表現し、比較関数のポインタも一緒にソート関数に渡して‥という感じになってしまい、比較関数の呼び出しのオーバーへッドが馬鹿にならず (10 億回呼ばれてたりして) 苦労しました。結局マクロで実装し直したりして。
その点 STL では、テンプレートの魔術で比メンバ関数として実装した比較関数 (operator とか) をインライン展開してくれるので、下手に C で書くより速いコードを出力します。(合ってますよね?ちょっとだけ自信なし) C++ は C より非効率だと信じていただけに、知ったときはちょっとショックでした。
話は変わるんですが、Linux 上で C++ の開発をしようとするとコンパイラは g++ 以外にに選択肢はないと思うのですが、g++ のおすすめのバージョンってどれなんでしょうか?教授は g++-2.95.3 を勧めていますが、g++-3.0 とかってどうなんでしょう?どなたか実際に開発に使われている方がいらしたらアドバイス頂けると幸いです。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
STLの作者 (スコア:2, 興味深い)
僕はこの授業をとるまではバリバリの C プログラマだったので、C++ に STL とおぼえることが多くてちょっと苦戦しています。
# 今日その授業のテストだったのですが、かなりだめでした‥。
以前 C でコンテナを書いたときは、どうしても、データを void* で表現し、比較関数のポインタも一緒にソート関数に渡して‥という感じになってしまい、比較関数の呼び出しのオーバーへッドが馬鹿にならず (10 億回呼ばれてたりして) 苦労しました。結局マクロで実装し直したりして。
その点 STL では、テンプレートの魔術で比メンバ関数として実装した比較関数 (operator とか) をインライン展開してくれるので、下手に C で書くより速いコードを出力します。(合ってますよね?ちょっとだけ自信なし) C++ は C より非効率だと信じていただけに、知ったときはちょっとショックでした。
話は変わるんですが、Linux 上で C++ の開発をしようとするとコンパイラは g++ 以外にに選択肢はないと思うのですが、g++ のおすすめのバージョンってどれなんでしょうか?教授は g++-2.95.3 を勧めていますが、g++-3.0 とかってどうなんでしょう?どなたか実際に開発に使われている方がいらしたらアドバイス頂けると幸いです。