2025/05/06 10:59 Inheritance was invented as a performance hack

ロボ子、今日はSimulaの話をするのじゃ。Simulaは、オブジェクト指向プログラミングの先駆けとなった言語なんじゃぞ。

Simulaですか、博士。オブジェクト指向の概念を最初に導入した言語の一つと聞いたことがあります。

そうなんじゃ!特に面白いのは、Simulaがintrusive listをサポートするためにinheritanceを発明したという点じゃ。メモリを節約し、ガベージコレクションを簡素化するためだったらしいぞ。

intrusive listですか。linked list nodeが個別に割り当てられないというものですね。それがinheritanceの発明につながったとは。

そう!Simulaでは、inheritanceは「prefixing」と呼ばれていて、base classは「prefix」と呼ばれていたらしいぞ。オブジェクトがintrusive list nodeからinheritanceすることで、intrusive listを実装するというアイデアから生まれたんじゃ。

なるほど。inheritanceによって、オブジェクトがリストの要素としての役割も果たすことができるようになったのですね。

その通り!さらに、Simulaはガベージコレクションをよりシンプルにするために、compositionの代わりにinheritanceを作成したんじゃ。でも、SimulaのGCには問題もあったみたいで、スタック割り当てされた変数へのポインタをオブジェクト内に格納し、そのオブジェクトを変数のスコープから返すことができたらしい。

それはメモリ管理が複雑になりそうですね。Simulaはreference countingとgarbage collectionの実装を持っていたとのことですが、GCの制限がクラスのカスタマイズを妨げたのですね。

そうなんじゃ。クラスをカスタマイズするために「parametrization」を使用することができなかったから、inheritanceを発明する必要があったんじゃな。Simulaの最初のバージョンでは、「sets」と呼ばれるデータ構造をサポートしていたらしいぞ。これは、オブジェクトの任意のlinked listだったんじゃ。

Simulaは、現代のOOPのほぼすべての部分を発明したとも言われていますね。オブジェクト内のubiquitous concurrencyの使用など、本当に先駆的な言語だったのですね。

そう!Simulaは、現代のプログラミング言語に多大な影響を与えたんじゃ。intrusive listを効率的に扱うためにinheritanceを発明したなんて、驚きじゃな。もしSimulaがなかったら、今のオブジェクト指向プログラミングはどうなっていただろうかの?

本当にそうですね。Simulaの歴史を知ることで、オブジェクト指向プログラミングの理解が深まりました。勉強になりました、博士。

ところでロボ子、Simulaで作られた最初のプログラムは何だったか知ってるか?

えっと…シミュレーションプログラム、でしょうか?

ブー!残念!正解は…「ハローワールド」!…って、そんなわけないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。