2017-11-03 Fri [ 天外2製作メモ ]
前の記事リンク。
■ その1
前の記事の反応を見て、当時のmakeは「UNIXのSVR4またはBSDに載っていたmakeを、当時の環境ではフルセットでは実装できず見よう見まねで、サブセットとして実装されていた、俺が村makeだった」ということが理解されていないことがわかったので、今回はそのあたりから話を始めたい。
どうしてサブセットだったのか?
第一にマシン性能が全然足りなかったからだ。
当時のUNIXが走るマシンは実際に使うときのプロセスの制限はともかくとして、CPUが32ビットになり、仮想記憶を持って、メモリ保護があり、プログラムで使える空間が普通に1メガバイトぐらいはあるのが普通になりつつあった。
そして、そういったUNIXマシンで動いているツールをわれらがヘッポコMS-DOSで動かすのは至難の業だった。
というのも、まず8086が、大きなメモリを取り扱うのがクソ下手なCPUだった。ともかく64KBを超えるものを扱うと、やたらコードが肥大し、しかも遅くて・バグりやすいという、涙が出るほど嬉しい仕様だった。
おまけに当時のDOSは実メモリでしか動かない(ついでに書くとシングルタスクである)。そして実装されているメモリは88-89年当時、386搭載のマシンで640キロバイト+1メガバイトに到達したぐらいで、おまけにプロテクトモードで使える1メガバイトは速い8086として使っている限りはなんの役にも立たなかった。だから右のようなメモリマップで使うのが当たり前で、あらゆる開発ソフトウェアはだいたい384KBぐらいのメモリで必死で動くのが仕様だった。
第二に、ツールのソースを手に入れるのが恐ろしく難しかった。
まずUNIXは当時はプロプライエタリなソフトウェアで、大学の連中はバークレイとAT&Tライセンスのおかげでソースコードを見ることができたが、企業にいる人間は「恐ろしくお高いソースライセンス料」を払わないとみられない。
今なら「GNU(なんかフリーウェア)で」ってセリフがすぐ出てくるところだが、30年ほど前にはGNUはまだピカピカの概念で、大雑把にはgccやmake, そしてかの有名なemacs、ユーティリティなどがあったのだけど、普及しているとは言い難かったし、そもそもツールの揃い自体が悪かった。
ついでに書けば苦労してソースを手に入れても、結局、マシンパワーがない問題にブチあたり、やっぱりちゃんとは動かない。
だから、当時のDOSの上で使えるUNIX系のツールはどれもこれもサブセットばかりで、アスキーから発売されていたソフトウェアツールズにしても、当時の『bit』という雑誌に【MS-DOS=UNIXもがき】と表現されたような、なんとなくUNIXみたいなコマンド(ただし機能は超削減版)でなんとなくUNIXみたいな気分で使えます、って代物だったのだ。
ついでに書くと、今の人たちは想像もつかないだろうが、viだろうがemacsだろうが"micro emacs"とか"micro vi"とか、そういう機能削減版のエディタがあるのが当たり前だった。
だからホビープログラマが沢山いる、UNIXもがきのMS-DOSらしく、パソコン通信や、そこらじゅうに、UNIXとかいうウルトラかっこいいOSにあるらしいコマンドをそれっぽく載せて見たぞコマンドが転がっていて、こいつらの間ではオプションの取り方からなにから、全く統一されていない、しかもどいつもこいつもサブセットって世界だった(オプションをパースするところから自作なのだから当たり前だ)。
そして、もちろんコンパイラも同じ世界。
そこらじゅうのメーカーからプロプライエタリなコンパイラが発売されていて、Lattice Cだの、White Smith CだのマイクロフトのMS-Cだの、BorlandのTurbo-Cだの、LSI-C(日本のコンパイラ。試食版とよばれるフリー版があり、ものすごく普及していた)があった。
もちろん、それぞれに独自のライブラリがあり、mathもclibもstdioは微妙に挙動が違いがあり、すべてのコンパイラについていたmakeは、やはり独自実装で、だいたい独自のルールや独自の拡張が行われていて、しかも元のUNIXのmakeからは機能が縮小されたモノで、オリジナルのmakeに比べると、イロイロと使いにくいものだったわけだ。
そして、日本で当時有名だったmakeは、さきほど書いたアスキーソフトウェアツールズに入っていたmake、マイクロソフトがMS-Cに付属させていたnmake(なんとこいつVisual Studioに今でも付属していた!)、BorlandのTurbo Cに付属していたtmake、LSI-Cのmakeなんてあたりってことになる。
もちろん言うまでもなく、こいつらは上に書いた通り、全部「UNIXより便利」と自称する独自拡張があって、そしてサブセットだった。
ところでLSI-Cをダウンロードすると、そういう独自拡張された世界がどんなんだったのか、ある程度わかるので、興味がある人たちはダウンロードしてみてみるといいと思う。
と、世界の説明をしたところで、開発環境が七転八倒する騒ぎになりだした最初の兆候は確か89年の5月頃だったと思うのだけど「lkでプログラム全体がリンクできなくなる問題」が発生したことだった。
というところで、クソ長くなったので続く。
■ その1
前の記事の反応を見て、当時のmakeは「UNIXのSVR4またはBSDに載っていたmakeを、当時の環境ではフルセットでは実装できず見よう見まねで、サブセットとして実装されていた、俺が村makeだった」ということが理解されていないことがわかったので、今回はそのあたりから話を始めたい。
どうしてサブセットだったのか?
第一にマシン性能が全然足りなかったからだ。
当時のUNIXが走るマシンは実際に使うときのプロセスの制限はともかくとして、CPUが32ビットになり、仮想記憶を持って、メモリ保護があり、プログラムで使える空間が普通に1メガバイトぐらいはあるのが普通になりつつあった。
そして、そういったUNIXマシンで動いているツールをわれらがヘッポコMS-DOSで動かすのは至難の業だった。
というのも、まず8086が、大きなメモリを取り扱うのがクソ下手なCPUだった。ともかく64KBを超えるものを扱うと、やたらコードが肥大し、しかも遅くて・バグりやすいという、涙が出るほど嬉しい仕様だった。
おまけに当時のDOSは実メモリでしか動かない(ついでに書くとシングルタスクである)。そして実装されているメモリは88-89年当時、386搭載のマシンで640キロバイト+1メガバイトに到達したぐらいで、おまけにプロテクトモードで使える1メガバイトは速い8086として使っている限りはなんの役にも立たなかった。だから右のようなメモリマップで使うのが当たり前で、あらゆる開発ソフトウェアはだいたい384KBぐらいのメモリで必死で動くのが仕様だった。
第二に、ツールのソースを手に入れるのが恐ろしく難しかった。
まずUNIXは当時はプロプライエタリなソフトウェアで、大学の連中はバークレイとAT&Tライセンスのおかげでソースコードを見ることができたが、企業にいる人間は「恐ろしくお高いソースライセンス料」を払わないとみられない。
今なら「GNU(なんかフリーウェア)で」ってセリフがすぐ出てくるところだが、30年ほど前にはGNUはまだピカピカの概念で、大雑把にはgccやmake, そしてかの有名なemacs、ユーティリティなどがあったのだけど、普及しているとは言い難かったし、そもそもツールの揃い自体が悪かった。
ついでに書けば苦労してソースを手に入れても、結局、マシンパワーがない問題にブチあたり、やっぱりちゃんとは動かない。
だから、当時のDOSの上で使えるUNIX系のツールはどれもこれもサブセットばかりで、アスキーから発売されていたソフトウェアツールズにしても、当時の『bit』という雑誌に【MS-DOS=UNIXもがき】と表現されたような、なんとなくUNIXみたいなコマンド(ただし機能は超削減版)でなんとなくUNIXみたいな気分で使えます、って代物だったのだ。
ついでに書くと、今の人たちは想像もつかないだろうが、viだろうがemacsだろうが"micro emacs"とか"micro vi"とか、そういう機能削減版のエディタがあるのが当たり前だった。
ちょっぴり余談を書くと、若かりしころ松下の無線研究所でバイトをしたことがあるのだけど、そこで使っていたのはVAX11で4.2BSDだったのだけど、emacsは「メモリを使いすぎるから使用禁止」だった。ついでに書くと 1メガバイトのメモリをアロケートすることも直接は出来ず、デバイスドライバ経由で操作できる特別なフレームバッファをワークエリア代わりに使っていた。
ついでに書くと、OS-9/68000という、僕が就職して仕事で使っていたOSも、やはりUNIXのツールのサブセットだった(それでもDOSよりははるかにマシだったけれど)。
ついでに書くと、OS-9/68000という、僕が就職して仕事で使っていたOSも、やはりUNIXのツールのサブセットだった(それでもDOSよりははるかにマシだったけれど)。
だからホビープログラマが沢山いる、UNIXもがきのMS-DOSらしく、パソコン通信や、そこらじゅうに、UNIXとかいうウルトラかっこいいOSにあるらしいコマンドをそれっぽく載せて見たぞコマンドが転がっていて、こいつらの間ではオプションの取り方からなにから、全く統一されていない、しかもどいつもこいつもサブセットって世界だった(オプションをパースするところから自作なのだから当たり前だ)。
そして、もちろんコンパイラも同じ世界。
そこらじゅうのメーカーからプロプライエタリなコンパイラが発売されていて、Lattice Cだの、White Smith CだのマイクロフトのMS-Cだの、BorlandのTurbo-Cだの、LSI-C(日本のコンパイラ。試食版とよばれるフリー版があり、ものすごく普及していた)があった。
もちろん、それぞれに独自のライブラリがあり、mathもclibもstdioは微妙に挙動が違いがあり、すべてのコンパイラについていたmakeは、やはり独自実装で、だいたい独自のルールや独自の拡張が行われていて、しかも元のUNIXのmakeからは機能が縮小されたモノで、オリジナルのmakeに比べると、イロイロと使いにくいものだったわけだ。
そして、日本で当時有名だったmakeは、さきほど書いたアスキーソフトウェアツールズに入っていたmake、マイクロソフトがMS-Cに付属させていたnmake(なんとこいつVisual Studioに今でも付属していた!)、BorlandのTurbo Cに付属していたtmake、LSI-Cのmakeなんてあたりってことになる。
もちろん言うまでもなく、こいつらは上に書いた通り、全部「UNIXより便利」と自称する独自拡張があって、そしてサブセットだった。
ところでLSI-Cをダウンロードすると、そういう独自拡張された世界がどんなんだったのか、ある程度わかるので、興味がある人たちはダウンロードしてみてみるといいと思う。
なお「ほにゃらら.com」は今の64bitになったwindowsではついに動かなくなった、CP/M-86ほぼ互換のバイナリ。
と、世界の説明をしたところで、開発環境が七転八倒する騒ぎになりだした最初の兆候は確か89年の5月頃だったと思うのだけど「lkでプログラム全体がリンクできなくなる問題」が発生したことだった。
というところで、クソ長くなったので続く。
コメント
この記事のトラックバックURL :
トラックバック