2001.6.8

 プログラミングスタイル(fjでのやりとりで感じたこと)

 (fj.comp.lang.cで議論している人が見てないことを祈って(^_^;)

 いつ頃からなのか削除してしまってわからなくなったのだが、ニュースグループの fj.comp.lang.cで、「mallocとfreeと exit」で議論が泥沼化している。
 第3者として見ていて、最初の方はまだ少しはましだった(もう憶えていない)のだが、最近は本当に泥沼化していると思う。
 ・mallocしたら freeはするべきだ派
 ・mallocしても exitする前には freeする必要はない派
 の2つで今は議論しているように思われる。
 どちらも、議論のための議論、反論のための反論に終始していて、納得のいく解決方法など無いだろう。
 何故ここまで議論するのかは、僕が思うに、育ってきた(学習した)環境が違うんだからプログラミングスタイルが同じになるわけがない、ということだろう。
 誰1人として同じ境遇に育った人がいないと同じで、同じC言語というコンピューター言語を使ってきた人たちもそれぞれ全く別の環境で学習・使用してきたと思う。
 よりよい方向を目指すような議論なら良かったのだろうが、相手の考えを否定する方向に進んでいる議論では収束しようがない。相手が「間違ってました」とでもいわない限り。



 で、僕はこう思っている。
 何で書こうが、どういう環境で使おうが、「mallocした後は freeするべきである」ということだ。
 根拠は簡単である。自分でやったことは、自分で始末する、ということである。
 もちろん、自分でやっていなくても、誰かにお願いされたら始末をしてあげることもあるが、基本は自分で始末をつけるようにする。
 特にC言語の場合は、はっきり言ってライブラリは他人だ。mallocもfreeもexitも他人のやっていることなのだ。自分としては「mallocを使うとメモリが確保される」「freeをするとメモリが解放される」「exitをするとプログラムが終了する」ということだけがわかっていることのはずだ。どれも処理系依存(ライブラリの作者依存・OS依存)ということである。
 となると、あとは意味を考えて使うことになるということだ。明らかに mallocと freeは相互依存で対になっている。exitの実装方法は自分の知るところではない。ということは、mallocと freeは対で使った方が精神衛生上((^_^;)良いということである。
 最近の議論であった、exitで freeされるようになっているから exitの直前では freeしなくてもいい、という話は一部の話というだけで全部に適用するわけにもいかないのは、ちょっと考えてみてもわかることだろう。オブジェクトがどうとかこうとかいっている人もいるが、問題はそういうところの話ではない。
 まあ、僕は exitはできる限り使わない派だから、「mallocとfreeは対だ」という考え方になるのかもしれないが、誰かが「exitがいくつもあった場合は、全部に freeを書いていくのか!?それは無駄だ!」ということを書いていたが、それも問題点が違っていて、「exitをそんなにたくさん書くプログラム設計がおかしいんとちゃう?」と僕は言いたい。その人の書くプログラムには入口は1つしかないのに、出口がいっぱいあるらしい。僕ならもしどうしてもエラー処理などで exitを書く必要が出てきた場合は、別に関数(ExitProgram()みたいに)を作って、終了処理をそこに集約する。効率を考えるとそうなるのとちゃうの?という感じだ。たぶん、僕の考える「効率」と彼らが考える「効率」は大きく違うのだろう。
 僕の考える効率とは、「誰が見ても流れがわかりやすいプログラム」だ。まあ、決して、今まで作った物がそうだったかと聞かれたらちょっと赤面する物も数多くあるが(若気のいたりと言うことで(^_^;)、基本はそうだ。「流れがわかりやすい」というのは処理にしろデータにしろどこでどうなってどうなるという起点と終点のはっきりしたプログラムということだ。

 他の意見の考え方の1つに、「汎用的な物を作るのではない場合はexitだけで良い」という考え方があった。一理あるが、僕は絶対このようなことはしないし、同じプロジェクトチームにいる奴にはさせない。
 そりゃあね、最後の手段でこうする場合はあっても、それを前提として使ってはいけないと思う。将来的にも「絶対に」仕様追加が無く、この製品で「必ず」完結するという場合は、最終のコーディング最適化でこうするかもしれないが、普通そういうことはないから、こんなことはしてはいけないと思っている。



 それにしても、疲れるねえ。
 僕は自分に関係する場合はその時の状況によって取捨選択するが、関係ない場合は「そういう考え方もあるね」ぐらいでおさめておく。
 自分の意見を言いたいのはわかるが(現にこの日記もそうだが(^_^;)、議論は勝ち負けじゃないんだから相手が納得しようがどうしようが「貴方の意見はこうだ。私の意見はこうだ。ま、考え方の違いだね」ぐらいで良いじゃないかと思う。
 なんか折伏させることに近いような。僕のような第3者から見たら、「なんて大人げない。子供のけんかやな」と思われると考えていないのだろうか。あ、考えていないのだろうね。だって子供っぽいんだもん。(^_^;
 自分の意見が通らなかったり反論されたりすると「キレる」奴が増えてるんだろうね。ん?「オタク」はそういう奴が多いか。



 今日の日記は全部読んでくれた人は数少ないと思うが、ま、僕はこう考えているということで許してください。