C++ において const を採用するかどうかはインターフェースに関わる重要なことで、当然その方針の異なる二つの何か(ライブラリ、クラス、関数、お好きなものをお選びください)を同時に使っていこうとすると、簡単に破綻してしまう。誰だって const_cast や mutable だらけのコードは書きたくない。
現実には全てを一から書くわけにはいかないので、何らかのライブラリを利用することになる。例えば標準ライブラリであったり Boost であったり、仕事なら社内製のライブラリであったり…
それを使うコードもまた、それらにあわせたインターフェースで書かれるべきだ。それを怠ることは、未来の仕事を生産することになる。
http://twitter.com/chonan/status/7774229332
チームが生産するものが他のプロダクトで使われるなら、チームのルールはイコールインターフェースだ。となると当然、「きちんと」決めるうえで考えなければならないことは何か?標準だ。標準とは何か?普通は標準ライブラリだろう。標準ライブラリが const 性に考慮した設計になっているのなら、それに習おう…
…とまあこういう風な切り口で書くのもありだったかもしれない。けれども、世の中の多くの人間は「他人」の苦労なんてどうでもいいように振舞っている(たとえそんなこと思っていなかったとしても)。
だから「const を使うこと」の「自分にとっての」合理性を、できる限り小さい事実と仮定から導き出すには…あの投稿は、大体そんなところだった。
その後は「const がインターフェースとしてどういう意味を持つか」を書いて「const によるオブジェクトの変更権と swap があわさると、ムーブセマンティクスもどきが実現できるよ」というところまで書くつもりだったんだけれど、残念ながら飽いてしまった。釣りっぽい文章を書くのって疲れる。
まあ C++ の標準ライブラリであるところの STL がなんだか難しいあれやこれやの事情のために「少々」ゆがんでしまったことは、幾ばくかの不幸を生み出しているかもしれない。
ただ C++ のこれからに関してはボクはかなり楽観視していて、それは shared_ptr の design goal として「(所有権を伴う参照を表す)インターフェースとなること」があったから(インターフェースの重要性に気づいたのだ!(いや前から分かってると思うんですけどね…(わあ Lisp みたいだわ(とってもすてき))))なのだけれど、まだ使わないといけないんですか!?っていう反応は、そうですね、正しいと思います…
あー書き忘れた。まあつまりメタ論を垂れ流すのは自分のためなんです。「きちんと」決められなかった規約のために自分の仕事が増えるようなことはボクは絶対に厭だ。お前らなんて呪い殺してやる、そういう黒い感情、それがボクの徒然。
profile
niha
http://niha28.sakura.ne.jp/