ソースコードのmodularityの低さ(1)

いまだに、やねうらおC++でプログラムを書かないといけないことがある。この状態はまだしばらくの間は続くと思う。C++は、ライブラリを部品のように使うことが出来ない。namespaceを使って書けば、名前空間を形成することは出来る。それは、部品ではないのか?―――断じてNo!だ。部品としての要件をほとんどと言っていいほど満たしていない。

たとえば、あるライブラリをコンパイルするときに、オプションをconfigureすることが出来るが、よく考えると、この仕組みはおかしい。

いま、部品を組み合わせて何かを組み立てることを考えるとしよう。部品は市販の標準部品だ。規格でぴったり決められている。これを購入してから必要ならばその部品を加工する。configureを変更するということは、部品そのものを購入前に加工してしまうことに相当する。オーダーメイドの部品を要求するわけだ。これは特注部品であって、部品を部品そのままの形で使っていることにはならない。そのソースはコンパイル時に、なんとかライブラリを持ってきてconfigureでこない設定してコンパイルしてくださいという但し書きをつける必要が出てくる。

わかりにくい?

あるライブラリのAという処理に対してA’,A’’という二つの実装を用意してあるとしよう。使う側からすれば、いま、このライブラリのA’の実装のほうを指定したいのだ。そのためにライブラリのconfigureをいじってAの実装にはA’を使いなさいと指定する必要が出てくる。さもなくば、templateを用いて、A’の実装を実体化する必要が出てくる。実際、そういうやりかたを目にすることは多いが、それはtemplateの濫用だと思う。もちろん、templateを用いる以外に、やりようが無いから仕方なしにやっている意味もあるのだが..。(つづく)