ライブラリを網羅的に解説することはできない。たとえば、vectorの全メンバーをいちいち説明することは、できない。量が膨大すぎるからだ。ではどうするか。思うに、ライブラリを使うにあたって、理解しておかなければならない、概念を説明するべきだと思う。
そもそも、コンテナとは何か、イテレーターとは何かという、概念を説明すれば、そのライブラリを使うのは、容易ではないだろうか。
私の経験では、ライブラリの全メンバーを列挙している本が、役に立ったためしはない。ただ全メンバーを列挙しているだけなら、規格書とか、コンパイラの提供するリファレンスを読めばいい。私は、個々のメンバーの解説を読んでも、STLの使い方を理解することはできなかった。
必要なのは、概念の解説だ。
概念の解説なら、冗長にならないとはいえ、やはり、すべてを解説することはできない。では、何を解説するのか。
まず、イテレーターやコンテナは必須だろう。関数オブジェクトと、それに付随するfunctionやbindの説明も必要だ。
また、ライブラリを使うにあたって、最低限しておかなければならないこと。たとえば予約語とか、std名前空間の利用だとかについても、一言書いておかなければならない。
<cstddef>や、<cstdint>は、網羅的な解説になってしまうが、これは必須だ。std::size_tとは何か、とか、int8_t, int32_tなどの整数型は、説明しておかなければならない。numeric_limitsも、できれば解説したいが、ページ数を考えると、難しい。
<algorithm>はどうだ。<algorithm>の個々の関数を解説するのは、ページ数の関係上、難しい。しかし、イテレーターを解説する以上、<algorithm>の概念は、解説しなければならない。
Move Semanticsと、それに付随する、move()/forward()は、必ず解説しなければならない。
スマートポインターも、概念を解説する必要がある。unique_ptrは、auto_ptrより使い易い。
例外安全も、概念だけは、解説しておいた方がいいだろう。
いろいろ悩んだ挙句、threadやatomic関係のライブラリは、現時点では、解説しないことにした。これには相当の批判がでるだろうが、理由がある。およそ、スレッドやconcurrencyは、数百ページ程度で説明できるものではない。それだけで一冊の本が書ける。浅く紹介だけしておくのはどうかという意見もあるだろう。しかし、
「はい、std::threadで、こんなふうに書けば、スレッドが作れますねー。はい、これでおしまい」
とか、
「std::atomicを、こんなふうに書くと、同期できます。ん? 同期って具体的に何かって? 余白が足りないので説明できませーん。あしからず」
などといった解説が、果たして何の役に立つというのか。
その他、付録として、演算子の優先順位の表と、互換機能の一覧が必要だ。
果たして、ページ内に収まるだろうか。
No comments:
Post a Comment