重要なのはModelではなくてConceptじゃなかろうか?

少なくともGeneric Programmingの文脈では,Conceptが厳密に定義され,それが完全に文書化されていることが重要だと思うようになってきた(ConceptとModelの定義についてはhttp://www.boost.org/more/generic_programming.htmlを参照してください).この観点から見たとき,例えばSTLで重要なのはvectorではなくて,規格書にあるvectorに対する要求リスト(http://www.kuzbass.ru/docs/isocpp/lib-containers.html#lib.container.requirements, http://www.kuzbass.ru/docs/isocpp/lib-containers.html#lib.vector)じゃないでしょうか?我々がvectorを便利に使っているのは,たまたまsequencial container conceptのmodelとしてvectorが労せず手に入るから,ただそれだけのことじゃないでしょうか?STLの最大の貢献は,例えばcontainerで言えば,containerの実装を提供していることではなく,C++の世界において(最大多数の)共通性を持つcontainerのconceptを提供していることではないでしょうか?
こう考えたとき,Genericなlibraryにおいては,その実装は2の次であり,conceptの策定とその普及こそが第1の生命線ではないでしょうか?
boost::graphのdocumentは次のように語っています.
http://boost.cppll.jp/HEAD/libs/graph/doc/constructing_algorithms.html

The main goal of BGL is not to provide a nice graph class,
or to provide a comprehensive set of reusable graph algorithms (though these are goals).
The main goal of BGL is to encourage others to write reusable graph algorithms.

つまり,私が例えば何かGraphのアルゴリズムを再利用可能な形で書こうとするとき,私にとって一番重要なのはgraphのconceptです.そこで実際に用いているのがboost::graphが提供するmodelなのは,たまたま労せずして手に入るmodelとしてそれがあった,というだけの話ではないでしょうか?
私が規格書の必要性を感じたのも,まさに標準ライブラリが要求するConceptを知る必要性を感じたからでした.Generic Programmingにおいては最大多数が提供しているConceptに従っておくほうが,再利用の観点からは得策です.で,標準ライブラリはsequencial container, associative container, iterator, algorithmの各conceptに対して最大多数のものを提供しており,そしてそれらは十分信じ,従うに足るものです.私がもし,STLが提供するModelに不満を持ち,新しいcontainerを書こうと決断するときにも,STLの要求するconceptを満たしたcontainerを書こうとするに違いないでしょう.これこそがSTLの最大の効力であり貢献だと思うのです.
私がgraphのconceptとしてboostのそれを選んだのは,boostのそれはgenericな実装に携わってきた先達たちによって磨き上げられた,信じ,従うに十分足るconceptだと思ったからです.私は決してboost::graphのmodelを選んだのではありません.boost::graphのconceptを選んだのです.そう言えるようにまずはあの膨大なdocumentを読む・・・のはだるいにゃ〜.