現実と闘う

  • 投稿日:
  • by
  • カテゴリ:



ウラをとる作業。


以前、Cの経験しかない人が、



このソース、同じ関数名がだぶって使われています!


だいじょうぶなんすか?



と言いました。私は、湖を指差し、「その辺に網を投げなさい。けれど魚は獲れないでしょう」とは言いませんでしたが、代わりにこう応えました。



それはC++では普通のことで、関数の多重定義とかオーバーライドと呼ばれる仕組みです。


それがないと、私は途方に暮れてしまいます。


よく観察してください。引数の個数や型が違うでしょ。


これがなければ、簡単な例では、ゲッター/セッターの名前の個数がすぐに爆発してしまいます。



set_int、set_double・・・set_hogeなどの名前爆発(naming explosion)は、昔のCの大規模ソースで実際に経験していたのです。


しかし、質問者は続けます。



ウゲー。


それじゃぁgrepしたとき困るじゃないすか~



それには同意するしかありません。しかしあえてこう付け加えておきました。



C++を創った人は、現実世界の問題を、エレガントに解決することを考えているので、メリットのない拡張はありません。デメリットはメリットを下回るのです。「なぜか」を考えないとエレガントにはいきませんがね。



この部分は、断片的な記憶を頼りに騙ったわけです。この部分の裏を取ろうとしばらく悩んでいました。


で、駐車場の割引券欲しさにヨドバシでたまたま買ったD&Eの前書きのような端書のような能書きに、書いてあるのを見つけました。



C++の目的は崇高である:プログラマに、現実世界のコードの抽象度を高め、ひいては多くの真剣なプログラマの労働環境を改善しよう、というものである。




真剣でないが、*1C++プログラマは抽象度も、労働環境も、生産性の向上も得ることができないのは仕方が無い気がします。ただしそのおかげで私のような三流実装屋でも、簡単に実装を改善をすることができるわけですが。




*1:2010.04.04「が、」は誤記なので訂正しました