2007年7月15日

C++の設計と進化

しばらく前からのろのろ読んでいた『C++の設計と進化』を読み終えました。C++ の設計者、Bjarne Stroustrup 氏による著作です。

 

C++は多様なスタイルを許す

C++にはCから受け継いだポインタ、構造体、マクロといった機能に加えて、リファレンス、クラス、テンプレート、例外、ネームスペースといった新たな機能が追加されています。

この結果、C++のプログラムは、昔ながらのC、クラスベースのオブジェクト指向プログラミング、テンプレートによるジェネリックプログラミング、など、さまざまなスタイルで書くことができます。これらを混在させることも可能です。

私が以前から疑問に思っていたのは、なぜ C++ はこんなにいろんな書き方ができるのか(コーディングスタイルもまちまちだし)、ということです。本書の第一章にまさにその答えがありました。

C++の設計の多くの部分が、強制に対する私の嫌悪に根ざしている。人類の歴史の最悪の惨事は、"これは良いことだからこれをやれ!" という理想主義者の強制から生じている。(中略) C++は意図的に、多様なスタイルを実現できる設計になっている。それは「たった一つの正しいやり方」を強制する言語ではない

氏のこの考えは本書の他の箇所でも繰り返されており、硬い信条であることがうかがえます。

C++ はプログラミングを楽しいものにする?

4章では C++ の設計の目標として、次の一文が第一に挙げられていました。

C++は本格的なプログラマにとってプログラミングを楽しいものにする

これを読んだとき、「プログラミングを楽しいものにするのが目標だなんてまるで Ruby みたいだ!」と一瞬、思いましたが、よくみると「本格的な」と限定されています。C++を楽しむには「本格的」でなければならない、というのは妙に納得してしまいました(難しいので…)。

C++ の標準化委員会と自転車置場

C++ の標準化委員会でも、瑣末な事柄ほど長大な議論を引き起こしやすいという自転車置場の議論の現象は例外なく当てはまるようで、さまざまな逸話が取り上げられています。氏はこの現象について、以下のようにずばり述べています。

おもしろいことに、関心と一般の議論の大きさは、機能の重要性と反比例していることが多い。その理由は、大きな機能より小さな機能のほうが明確な意見を持ちやすく、流行のような、一時的な関心を引きやすいからだ。

もちろん委員会では瑣末な事柄の議論だけでなく、(最終的に却下された)例外の再開続行セマンティクスの議論に見られるような、実際の大規模システムの経験とデータに基づく高度な議論も行っており、それらを取り上げた節も読み応えがあります。

まとめ

本書は C++ の設計と進化に関する興味深い逸話の宝庫です。C++ がなぜ現在のような姿になっているのかを理解するには欠かせない一冊だと思います。

ただ、込み入った話題も多いので、C++にある程度慣れ親しんでから読んだほうが楽しめると思います。

C++の設計と進化
C++の設計と進化
posted with amazlet on 07.07.15
ビョーン ストラウストラップ Bjarne Stroustrup 岩谷 宏 エピステーメ
ソフトバンククリエイティブ (2005/01/19)
売り上げランキング: 147699