懐古

djgpp は gcc を DOS 上で動かせる環境だ。 Windows では cygwin だとか msys だとかいったものがあるが、それの DOS 版と考えればよいだろう。 ダイナミックリンクのようなものも実現している。 今では利用者はそれほどいないかもしれず、活動もそれほど活発とは言えないかもしれないけれど、 C コンパイラは先端に近いところまで追従しているようだ。

さて、 DOS 版とは言っても実際には DOS の上で DOS エクステンダを走らせてその上で動作する。 DOS エクステンダはリニアなメモリを提供すると同時に、そこから DOS の機能を呼出したりといった諸々のサービスを DPMI という API で提供する。 アプリケーションは 20 ビットの壁等といった過去の遺物に縛られない。 (ダイナミックリンクは DPMI の機能ではない。)

これは登場当時としては結構画期的なことだったのだ。 現代の PC では当然のように潤沢にメモリがあり、アプリケーションが扱うメモリは抽象化された存在になっているけれど、かつてはセグメント境界はいつも意識の端にあったし、コンベンショナル・メモリ以外のメモリを使おうと思うとやっかいな手続きを介する必要もあった。 ダイナミックリンクのようなものも可能ではあったが、コンパイラを提供しているメーカーが独自に決めた規格だったり、名称さえ統一されていなかったし、ときにはアプリケーション製作者が勝手にやってる例もあった。

今の Windows で DOS 用の実行ファイルを右クリックしてプロパティを選び、「メモリ」というタブを選択するといくつかのメモリ関連の設定項目が出るが、その中には DPMI という単語も見つけられる。ふとしたときにこういった語を見ると、妙な感慨に捕われる。今になってみると良いものとは言えないかもしれないが、決して過去の彼方に分断された技術ではなく、 Winsows は今でもそういった古い API をサポートしているし、それらの時代のノウハウのいくらかは最新のものにも残っている。

最近になって C# とかでプログラミングを始めた知人がいるんだけど、まるっきり違う感覚を持っているように感じることがある。 昔の方が良かったとまでは思わないけれど、ときおり懐かしいと思うのは私がもはや若者ではなくなったということだろうか。

Document ID: e36de996590d2c274d61c7e3447a37bb