include 死んじゃえというはなし

元のやりとりが imihu なので意味が分からない話になってしまいましたが、そもそも目的の違う物を比較して、便利だとか不便だとか言っているのはよく分からない、ということが言いたかったのでした。最初からそういえばよかった。

そして、比較とかしなくても pimpl なんて便利でも何でもないんですよ。実装とか普通は隠蔽されているべきだし、それはそのインターフェースがオープンかクローズか、とは別の次元の話でないといけない。そうなっていない言語仕様はおかしい。完全なオブジェクトのレイアウトとかが知りたいケースでカスタマイズさせたいとかはありえないので、やはり値になるのは struct だけ、とした D は全く正しかった!!

ボクはインターフェースと実装は分けたい人間なので、ヘッダ的な物を書かされるのはそんなに苦ではないんだけれど(D はやりすぎだ)、それでも include は全く許せない。インターフェースと実装を分けるには、インターフェースの定義を行うソースファイルと、実装を行うソースファイルが区別できるような言語のサポートがないといけない。C の include の仕組みは、あまりにも古くさすぎる。

ここ最近は、実装の隠蔽には pimpl より抽象クラスを使うべきなんじゃないかと思っていて…オープンになってて困ることよりは、クローズになってて困ることのほうが多いだろうし(主にテスト的な意味で)、仮想関数呼び出しやアロケーションコストが気になるような場面ならどうせ template 使うから隠蔽とかしないし、あと最近 ruby しか書いてないからその辺のバランス感覚がだいぶおかしくなっている。

というわけで pimpl もそうだけれどそれが必要になる言語仕様を強制する include 死んじゃえというはなしなのでした。include 死んだら template のコンパイルも何となく早くなりそうな気がしているけれど多分気のせいだ…