2010-01-02

C++0x本:実装依存について

本の品質を良くするために、どうか意見をコメントしてもらいたい。

私の書く予定のC++0x本は、言語仕様を解説する本である。特定の実装(例えばVC++やgccなどのコンパイラ)や環境(WindowsやLinux、組み込み系など)について解説するものではない。

ところが、世の中には、どうしても書かなければならない、デファクトスタンダードとなっている事項が存在する。

たとえば、registerやinlineは、ほとんどのコンパイラで、無視される。しかし、この機能が実装されていないわけではない。この手の仕事は、コンパイラの方が、人間より優秀なので、無視するだけなのだ。C++が設計された当時は、まだコンパイラの技術が貧弱だったので、こういう機能が役に立ったこともある。無論、これは規格の範囲外である。

ところが、もしこれを解説しない場合、「そうか! registerやinlineを使えば早くなるのか! さっそくどんどん使おう」などと、早合点するものが現れないとも限らない。no-opだから、実質は問題ないともいえるが、このような誤解を生むような本は書きたくない。

たとえば、exportは、ほとんどのコンパイラが実装していない。実際、標準化委員会でも、多くの者が、exportは失敗だったと考えている。これはあくまで、個人個人の考えである。標準化委員会としての意見ではない。結局、exportは、inclusion modelとseparation modelの両方をサポートしようとしたために、規格に入ったのだ。

exportについても、このことを、言及しておかなければならない。

たとえば、整数のオーバーフローは実装依存である。しかし、現実のコンピューターのアーキテクチャが、ほぼすべて、2の補数表現を用いている現状を知らなければ、「なぜ整数のオーバーフローが実装依存であることに注意しなければならないのか」ということが、理解できない。(ちなみに、atomic型の整数は、2の補数表現であることが規格で保証されている)

つまり、規格書の目次にそって解説するといえども、規格書の翻訳ではないので、実装依存の事を、完全に無視するわけにも行かないのである。ではどうするか。

思うに、必要最小限の、実装依存の事で、規格を理解する上で、特に知っておくべき事は、書くべきだと思う。ただし、それが実装依存の話であると分かるように、枠線で囲むだとか、インデントするだとか、印刷の際に、表現を変えて、通常のドキュメントとは違う文章であることを、明らかに分かるようにすべきだと思う。

どう思うだろうか?

本の品質を良くするために、どうか意見をコメントしてもらいたい。

2 comments:

I.S. said...

規格は総括的に書かれなければなりませんが、ほぼ全ての環境でde fact standardになっている実装方法もあるわけで、

> 思うに、必要最小限の、実装依存の事で、規格を理解する上で、特に知っておくべき事は、書くべきだと思う。
> ただし、それが実装依存の話であると分かるように、枠線で囲むだとか、インデントするだとか、印刷の際に、
> 表現を変えて、通常のドキュメントとは違う文章であることを、明らかに分かるようにすべきだと思う。

これでいいと思います。

Anonymous said...

後押しして欲しいだけなのかもしれませんが、
基本的にお考えのとおりで全く問題ないと思います。