2010-02-12

C++0x本:目次案、コア言語が完成

査読者の皆様は、Google Wave上でご確認ください。

さて、問題は、「その他」だ。

最優先するのは、コア言語の解説だ。しかし、その他はどうすればいいのか。物理的なページ数の都合がある。C++0xに追加されたライブラリに限定しても、すべてを深く解説するページ数はない。どうすればいいのか。

案1:広く浅く解説する。

各種ライブラリの目的と、短いサンプルコードを列挙する。

しかし、この案の場合、各種ライブラリについて、文字通り、「その目的と、短いサンプルコードを載せただけ」の薄っぺらい内容になってしまう。私は、未だかつて、そんな駄本が役に立った覚えはない。

案2:重要なものだけ選んで、深く解説する

これは、少なくとも、そのライブラリに関しては、満足できる。しかし、何が重要なのかは、人によって異なる。たとえば、私は<type_traits>は重要なライブラリであると考えている。しかし、乱数や、正規表現のライブラリの方が、重要だと考える人もいるだろう。あるいは、スマートポインタの方が重要かもしれない。いやしかし、なんといっても、std::vectorは重要だ。なにしろ、自分でわざわざrealloc()しなくてもいいのだから。

こう考えて行くと、「重要なもの」などという事は、選ぶことができない。一体どうすればいいのか。

案3:テクニックや概念を解説する

1を聞いて10を知る人間は存在しない。いくらリファレンスについて学んでも、move semanticsを思いつく人間はいないだろう。もし、そんな人間がいるとしたならば、そのような人には、本書は必要ない。規格書を直接読めば足る。Move Semanticsは重要だが、他にも、たとえば例外安全のような概念とテクニックもある。単に個々のライブラリを解説するのではなく、このような、概念やテクニックを説明するのはどうか。

単純にvectorの使い方を説明するのではなく、コンテナとは何か。イテレーターとは何かということを説明する。これは、私がC++を学んでいる間、本当に欲しいと思っていた本だ。そんな本は存在しなかった。どの本も、vectorをどのように使うかとか、その全メンバーを列挙してこれはこうだなどということは書いてあるが、イテレーターとはそもそも何ぞや、という事には、わずかなページ数しか割いていなかった。

テクニックと概念の説明にページを割くべきか。

また、これとは別に、通常のコンテンツのフローに、うまく溶け込めない説明というのがある。たとえば、演算子の優先順位だ。たとえば、属性のかける場所一覧だ。このような早見表を、Appendixとして、巻末にいれるのはどうだ。

とにかく、考えなければ。

No comments: