C言語の時代は例えばソースファイルが10個あったらそれを10個のオブジェクトファイルへとコンパイルし、その10個のオブジェクトファイルを1つの実行ファイルへとリンクするという感じだった。つまり「最小コンパイル単位は個別のソースファイル」だった。
1つのソースファイルに変更を加えたらそのソースファイルだけを再コンパイルすればよく、他の9個のオブジェクトファイルは再利用が利いた。俺は「この原則はオブジェクト指向言語においても保たれるべきだ」と考えたが、苦難の道を歩むこととなった。
実際にはオブジェクト指向は、ソースファイルがツリー状になるため最小コンパイル単位は「変更を加えたファイルとそこから派生する枝葉ソースファイルすべて」となってしまった。俺にとっては意外なことだったが誰もそのことに対して文句を言わなかった。
歳月が流れ、Rustという言語が現れた。この言語は「一つの実行ファイル(またはライブラリファイル)に関わる全てのソースファイルを毎回コンパイルしなさい」と言っている。そうしても大丈夫なほどハードウェアが速くなったのだ。
俺はようやく重い荷物を降ろすことができた。Rustと同等の最小コンパイル単位でよければもっと見通しのいいオブジェクト指向言語はあり得たというのが証拠なのだ。
・関数は仮想関数の方がデフォルトであるようなC++
・メッセージオブジェクトは文字列ではなくメソッドテーブルのオフセットであるようなObjectiveC
・あるいはガベージコレクタは必要なかったかもしれないJava
そういったあり得たはずの言語と比べればコンパイラ型のオブジェクト指向言語はおかしなものばかりだ。そしてC言語を正しく、そして一挙に継承するのがRustなのだ。
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
2
Go to list of users who liked
0