2009-08-07

C++規格の、freestandingの意味

freestandingという概念は、C++98の頃から存在する。ところが、この概念は、一般のC++プログラマーには、あまりなじみがないと思う。そこで、この意味と意義について解説してみようと思う。

freestandingとは何かということを説明する前に、C++が使われている状況について説明する必要がある。

C++は、非常に広く使われている。OSやドライバといった低級な部分から、エンドユーザーが実際に使うGUIのソフトウェアまで、幅広く使われている。携帯電話などにも、C++は使われている。

携帯電話やリアルタイム性が要求される場面など、リソースが極端に限られている環境では、通常の標準ライブラリが適さない場合も多い。そういう環境では、C++の言語自体は実装していても、ライブラリは、完全に提供していないこともある。そういう場合においても、C++の言語を実装する上で、最低限必要な条件を決めておこうというのが、freestandingの意図だ。

ここでは、freestanding規格のうち、ヘッダーについて更に詳しく説明する。

C/C++というのは、言語とライブラリの間の依存性が、極力少なくなるように考えられている言語である。なぜなら、環境によって標準ライブラリが適さない場合もあるのからだ。この思想があるからこそ、現在、リッチなクライアントアプリケーションから、組み込み系まで、幅広くC++が使われているのである。

ところが、やはり言語としては、ライブラリから完全に独立するということは難しい。

たとえばnewを実装するには、一連のnew 演算子などが必要であるし、例外クラスも必要である。typeidが返すのは、type_infoというクラスだ。

これを考えれば、言語をライブラリから完全に引き離すのは、仮に出来たとしても、面倒な事が多い。しかし、C++は先にも述べたように、言語とライブラリ間の依存性を、極端に気にする思想でもって設計された言語である。そこで、規格にも、最低限の実装にはどんなヘッダーが必要か、具体的に書かれているのである。

なぜこんな事を解説しているかというと、n2932 Fixing freestanding: iteration 2.2をレビューする必要があるからだ。この前提知識があれば、n2932が理解しやすくなると思う。

n2932自体には、プログラマが直接気にしなければならないことは、ほとんど書かれていない。ただ、type_indexを使う際には、<typeindex>ヘッダーをincludeしなければならないという変更がある。これだけは抑えておいた方がいい

No comments: