思考の泡

プログラミング、サイエンス、その他日常のことをゆるゆると

究極のプログラミングとは

究極のプログラミングとは何でしょう?

まあ色々な意見があるでしょうが、私が体験した中でやはり究極と言えるのはRAMが使えない環境でのプログラミングでしょう。

知らない人も多いと思いますが、コンピュータは電源を入れれば直ぐにRAMが使える訳ではありません。搭載されているメモリーの容量や種類を検出して適切なパラメータをメモリーコントローラに設定して初期化してやるまでRAMは使えないのです。

この処理を実行するのがファームウェアです。BIOSと呼ばれることもあります。ファームウェア自体はROMから読み込まれます。ファームウェアはこのメモリーコントローラの初期化以外にも自分自身の内容チェックとか様々なことを「RAM無し」で行なわなくてはなりません。

さてRAMが使えないプログラミングとはどんなものでしょう?OSのサービスが使えないのは当然として、高級言語も使えません。当然アセンブラです。アセンブラの中でも使える命令が限られます。まず jump はできても call はできません。call 命令はスタックを使いますから call 先から戻ろうとして return を実行した時点でアウトです。

一時的にメモリに値を保持することもできません。値を記録するために使えるのはCPUの内部レジスタだけです。限られたCPUレジスタをいかに効率よく使うかがプログラミングの鍵になります。悪夢のような世界です。

高級言語のプログラミングしかしたことの無い人にとっては想像もできない世界でしょう。スタックによるサブルーチンコールができるありがたさを思い知らされます。

普段PCやスマホを使っている人は、中でこのようなプログラムが動いていることなんてほんとんど気にしないでしょうが、こういった地味なプログラムの積み重ねで世の中は動いているのです。

プログラミング技術の一番偉大はものは何かと問われれば、私は「スタックの発明」だと答えます。