コンピュータ今昔物語6~Emacs対vi (UNIXミニコン VAX-11)
今は昔、コンピュータが計算機と呼ばれていたころの物語
前回:NEC パソコン PC-9801VM2とWindows1.0
次回:電話回線のパソコン通信と草の根BBS
DEC UNIXミニコン VAX-11
今は昔、UNIXがPCでもワークステーションでもなくミニコン VAX-11で動作していた1985年の頃、私は初めてEmacsと出会いました。ここではまずVAX-11について見ていきます。
(前座)DEC PDP-10系のEmacsとの出会い
VAX-11の前に同じDECのPDP-10系でのEmacsとの出会いを紹介します。
DECのメインフレームコンピュータPDP-10系ではTOPS-20というOSが動作していました。このTOPS-20はMS-DOSにも影響を与えたOSであり、MS-DOSのファイル管理やコマンド名にその名残りがあります。
このTOPS-20上で動作するテキストエディタに古(いにしえ)のEmacsがありました。1985年に私はここで初めてこのEmacsに出会いました。このとき私はVAX-11のUNIX上のviを使っていましたが、Emacsのすばらしさに感動して、UNIXでもEmacsに改宗しました。
DEC ミニコン VAX-11/780系
私が会社に入って最初に触ったコンピュータはDECのミニコン VAX-11/780系でした。VAX-11はタイムシェアリングシステム(TSS)を採用していて、端末を何台も繋いで、複数人が同時にソフトウェア開発を行っていました。またOSとしてはUNIX(Ultrix)が動作しており、その主要言語はCでした。
(参考)1 MIPS参照マシン
なお初代のVAX-11/780は計算能力が「1 MIPS(Million Instructions Per Second、毎秒百万命令)」に初めて到達したマシンとして参照されています。
なお現在では「1 TIPS(Trillion Instructions Per Second、毎秒1兆命令)」を越えるPCがあります。またスーパーコンピュータは毎秒100京を越えています。キーボードのデバイス制御用CPUでも余裕で1 MIPSを越えます。
VAX-11の端末ハーレム
VAX-11はタイムシェアリングシステムであり、VT100やCIT-204eなどのキャラクター端末(文字端末)が複数台接続されていました。そこで端末を2台以上並べて操作していました。剛の者は3台の端末を侍らせていました。まるでハーレムのようでした。
UNIXシステムで多重ログインを制限している場合は複数のログインを使って複数台の端末を操作していました。なんと贅沢な環境だったのでしょうか。
(参考)MicroVAX I
実は1985年に会社でVAX-11に出会う前に、1984年度にMicroVAX Iに出会って、初めてのUNIX(Ultrix)を体験しました。私の大学の研究室では「MicroVAXを日本で最初に輸入した(中のひとつ)」であったそうです(たぶん自慢です)。
なおMicoroVAXは分類ではミニコンでしたが筐体は小さいもので、既存のOKITAC system50/40と比較して、見た目は負けていました。
UNIX事始め
会社でVAX-11のUNIXを触る前に、数カ月でしたがMicroVAXのUNIXを触っていました。そのときのファーストインプレッションを紹介します。
MicroVAXのUNIXのファイルシステムを見て、OKITACのファイルシステムと比較して、あまりにも単純すぎて効率が悪いだろうと直観しました。そしてこれが事実であることがVAX-11でわかりました。でもシンプルでいいのですが。
一方でバッチ処理が基本のOKITACと比較して、タイムシェアリングできるシステムはいいものだと思いました。そしてこれが事実であることがVAX-11で端末ハーレム(と言っても端末2台)をして実感しました。
Emacs対viの戦争
ここではUNIXのエディタで起こったviとEmacsの戦争を見ていきます。
テキストエディタ vi の憂鬱
このUNIXでは標準のテキストエディタは vi でした。ただし検索と置換にはワイルドカードなどが使えるラインエディタの ed を使うのが一般的でした(たぶん)。
しかし vi はモードフル(ステートフル)なエディタであり、挿入モードとコマンドモードを持っていて、viを使うときは現在のモードを覚えておいて、手動でモードを切り替える必要がありました。なんとストレスだったでしょうか。
これに対して、Emacsは一般のエディタと同様に、モードレスで常に挿入モードであり、常にコマンドモードです。モードを覚える必要も、切り替える必要もありません。ストレスフリーです。
PCでの 8bit時代(PC-8801)はWordMasterであり、16bit時代(PC-9801VM2移行)はMifesや秀丸などのテキストエディタでしたが、もちろんストレスフリー(つまりモードレス)なエディタです。
テキストエディタ EmacsのLispによる拡張性
EmacsはTOPS-20のテキストエディタとして、1970年代にラインエディタTECOのマクロとして、G.L.スティールJr.らのハッカーたちによって開発されました。
G.L.スティールJr.はCommon Lispをまとめた人物であり、Emacsの主流の派生であるGNU Emacsをリチャードストールマンらとともに開発し、GNU Emacsではそのスクリプト言語としてEmacs Lispが採用されています。
Emacs Lispによって、Emacsの機能は拡張可能であり、Emacs上で動作する多くのプログラムが作られました。そしてあまりにも便利なプログラムが多かったため、UNIXのシェル上では1回emacsと打鍵すれば、後はEmacsの中だけで仕事ができました。メールを読むのもニュース(fjなど)を読むのも、プログラムを作成するのも(ってこれはテキストエディタだから当たり前)、makeするのもデバッグするのもEmacs上で行っていました。
(余談)Emacs Lispで問い合わせ可能なLispシェルの開発
なお私も問い合わせ可能なLispシェルをEmacs Lispで作成しました。問い合わせ可能なLispシェルとは、当時開発していたLisp処理系をEmacs上でプログラム開発から実行、デバッグが可能なシェルであり、さらにEmacsから質問などを問い合わせることができるようにしたものです。
(余談の余談) ジョークプログラム「メッセージを変えてみた」
Emacsは自由に拡張や変更が可能であったので、メッセージを変更するのも容易でした。私が作ったジョークプログラムでは、fjのニュースグループから記事を取得したときのリプライメッセージをおもしろ文句に変えられるようにしました。たとえば当時 fj の有名人であった人の口癖に変更したり、アニメの登場人物のセリフに変えたりしていました。おかげで伊熊猫賞やさいと賞などを受賞できました。
なおfjについてはコンピュータ今昔物語で取り上げるかもしれません。
エディタ戦争 vi対Emacs
1980年代にはUNIXのエディタ戦争が勃発しました。つまり vi か Emacsのどちらかが優れているかです。勝者になった方が新人研修などの教材になれます。
(1) ユーザ数:viの勝ち
残念ながら、当時のユーザ数では圧倒的に vi が優位でした。
残念ながらEmacs派はごく少数です。
(2) 拡張性:Emacsの勝ちと信じている
Emacsが拡張できるといっても、まずLispを知る必要があることを vi派から攻撃されました。それにvi派はシェルプログラムを呼び出すことで変態的な拡張をしていましたので、拡張性でもvi派は一歩も引きさがりませんでした。でもこれはさすがにEmacsの勝ちだと信じています。はい。
(3) 効率性:両者に言い分あり
vi派の言い分では、キーストロークはviの方が少ないと主張します。これはコントールキーとともにキーを押すのを2回または1.5回とカウントした場合にそうなります。
一方、Emacs派はなによりモードを覚える必要がないから、その精神的コスト低減が大きいとして、Emacsの方が効率的だと主張します。
これは両者言い分があり、引き分けとします。しかしvi派が数字で主張してきていましたので、うっとしいかったです。
(4) 包容力:Emacsの勝ち
Emacsではviを模倣するプログラム(viモードやvipモード)を作りました。余裕の包容力でEmacsの勝ちです。
(4) 歴史的判断:Emacsの勝ち
Emacs派は「どちらが勝つかは歴史が証明する」と、viやedを使うようなエディタはやがて自然淘汰されるということを予言していました。そしてこの結果は当然、Emacsの勝ちです。
あとがき
今回はVAX-11のUNIXとEmacsについて紹介しました。Emacsに対する思いが重すぎて、文字数が多くなってしまいました。ここまで読んでいただいた方、どうもすみませんでした。
この後、UNIXはUNIXワークステーションに移り、一方でPCでUNIXのクライアントプログラムを作ることが増えていきます。
(参考)参考文献
コンピュータ今昔物語
(1) 前史:マイ・コンピュータ入門とTK-80
(2) 前史:プログラム電卓 FX-502P
(3) NEC パソコン PC-8001とN-BASIC
(4) ミニコン OKITAC system50と紙カード
(5) NEC パソコン PC-9801VM2とWindows1.0
(6) Emacs対vi (UNIXミニコン VAX-11) (本記事)
関連NOTEマガジン
エッセイ:エンジニア未来日記
現代ソフトウェア開発読本/プログラミングの掟/プログラマ日常
ソフトウェア開発マンガFAQ
プログラミングの掟
笑撃!プログラマの日常ドラマ
Facebookのグループ紹介
いいなと思ったら応援しよう!
よろしければサポートをお願いします!