最近なぜか私のTLにはマニアックな若者が増えてきて、Smalltalk／Lispマシンの話とかすると妙に反応があったので、まとめ。

私とSmalltalk-80との運命的な出会い（いやほんと人生が変わった）は、マイコン雑誌「I/O」のSmalltalk-80紹介記事でした。1985年ごろに当時プログラミング好き（Z80、Fortran、BASICとか）の高校生でMZ-2000のテキスト画面しか知らなかった私は、「マウス」なるもので操作するマルチウィンドウや、白地に黒いマルチフォントを描けるビットマップディスプレイ、WYSIWYGエディタ、カット＆ペースト等、いまのあらゆるGUIの原型（MacやWindowsの元ネタ）を見て、さらにその言語が「3+4て書くと3が+4てメッセージを解釈実行するんだよ」とかいう意味不明なパラダイムで、それ何て並行世界？オーパーツ？位の衝撃を受けました。そこから数年はXerox PARC出身の鈴木則久先生の名著「Smalltalk」を毎日手放さない少年となりました。もちろん自分ちのパソコンじゃSmalltalkなんて動かないので、Alto等のXeroxワークステーションに触れる日を夢見てました。

しかしホント偶然に、私が入った大学にたまたまFuji Xerox 1121AIWがあったのです。しかも先輩が卒論書く時期以外はほとんど使われてません。大学にはSun 3とかSony NEWS等のUNIXマシンもありましたが、そんなトランジスタ時代のOSには目もくれず4年間1121を使ってました。



（引用元：Alto、Star、Smalltalk、Lisa、Mac、Win の関係をはっきりさせよう）

1121はAltoの子孫にあたるマシンで、Smalltalk-80とInterlisp-Dが動作します。その凄さ|変態さは、sumimさんのすばらしいサイトですべて語られてるので、ちょこちょこ抜粋させていただきます。

XNSプロトコル、Ethernet、レーザープリンター、Interscript まず、Web誕生前の80年代後半にTCP/IPじゃない独自プロトコルXNS（NetWare IPXの元ネタ）でグローバルなネットワークが構築されてた件。それもtelnetとかftpとか単純なものじゃなくて、現在のネットワークファイルシステムやActiveDirectoryのような洗練されたネットワークサービスが利用可能でした。私もDNSに相当するClearing Houseってやつのマニュアルとにらめっこしてました。 私は1988年から6年間、ユーザとして8080 J-Star II(コードネームKiku)などを使っていました。ドロワーをどんどん開いていくと、アメリカまで行ってしまったときの感動は今でも忘れられません。--abee Interlisp-Dで作られたアプリケーションに複写機などのUI作成を支援するTrilliumというシステムがあるのですが、このデモを見せてもらったとき、たまたまローカルに関数が見つからず、勝手に海の向こうから取ってきたのを見て腰が抜けました。 ウチの大学は外につながってなかったけど、黄色く太い同軸ケーブル（これがXerox PARC発明のオリジナルのEthernet。針のついたトランシーバをケーブルの途中にぶっ刺して接続する）でワークステーション間が結ばれてました。鈴木先生いわく、10Mbpsという速度は当時「肝をつぶすような広帯域」だったそうです。1121の横には8080というStarワークステーションと、同じくPARC発明のオーパーツ「レーザープリンター」がつながってて、これまたPARC謹製InterPress（AdobeのPostScriptの元ネタ）による超高品質印刷が可能。ドットプリンタ育ちの私は意味もなく自分のソースを印刷してその品質にほれぼれしてました。

ダイナミックマイクロプログラミング それと、ダイナミックマイクロプログラミングな件。つまりプロセッサ（16ビットで1MIPS位だったかな？）のファームウェアを使う言語に応じて入れ替えることで、SmalltalkやInterlisp-DのバイトコードをCPUが直接実行する仕組み。CPUそのものがVirtual Machineになるわけです。後のJavaチップ等の先祖で、これは当時のCISC界の先端技術でした（そんな複雑なことしてるからクロック速度上げられないのだけど）。 Dマシン最大の特徴は、 マイクロコードプログラミング可能なビットスライスプロセッサ を採用していたことでしょう。 私たちが普段使っているPowerPCやPentiumなどのCPUはチップ自体に命令セットが組み込まれており、これを変更することはできません。これに対して、Dマシンは 起動時に命令セット自体をロード することが可能でした。 この機能を用いることにより、動作させるシステムに最適な命令セットを用いることが出来ます。DマシンではViewPoint以外にもInterlisp-D, Smalltalk, XDE(Xerox Development Environment; Mesa開発環境)などを動かすことが可能ですが、これらのシステムに応じて命令セットを切り替えて使っていました。Smalltalkになじみの深いバイトコードとは、このSmalltalk用命令セットのことに他なりません。 マイクロプログラムの選択は、ブート時のパチスロっぽいボタン操作で行います。 1121AIW(や8080)のブートはものすごく変です。まず、メンテナンスパネルのカバーを開いて、リセットボタンとオルターネートボタンを同時に押し下げながら電源を投入します。続いてリセットボタンを離すと、4桁の7セグメントLEDがパラパラと変っていくので、適当なところでオルタネートボタンを離します。これでブート対象が切り替わる訳です。 0001でオルタネートを離すことを1番ブートと呼び(VPやXDEにも番号があります)、SystemStartupTool(ムービングロゴ)が起動します。ここからさらに、LispSystemToolsでInterlisp-Dを起動するか、RunST80でSmalltalk-80を起動するかを選択します。 私が1121のディスクイメージをごにょごにょしてたら壊れてブートしなくなったことがあって、教授にすごく怒られて（1000万するんだから大切に使ってくれよ！）、東京から仙台まで富士ゼロックスのサポートの人が来て1日かけて再インストールしてくれたことがありました。冷や汗かきました。

Smalltalk-80／Interlisp-Dは言語＋OS＋開発環境＋etcだよ 上記のような仕組みなので、例えばCで書かれたOSカーネルとか存在しません。OSカーネルは全部Smalltalk-80やInterlisp-Dそのもので記述されてます。ST80では、SemaphoreとかProcessorみたいなカーネルを構成するオブジェクトに始まり、基本ライブラリ（OrderedCollectionとか）、ファイルシステム、MVCによるGUI、ネットワーク、そしてIDEやバージョン管理まで、100% Pure Smalltalkで実装されてます。しかもEclipseっぽいIDE上で全部ソースを見れます。

（引用元：Smalltalk-80(スモールトーク・エイティ) ） まあST80のカーネルってたしかプリエンプティブじゃなくて、ちょうど今のFlash Playerみたいに「譲り合いの精神でマルチタスク」だったわけですが（yieldってのをちょこちょこ書かないと固まる）、でもLinuxのない時代に目の前で動いてるOSカーネルのソースを見れる（しかも変更できたりする）のは嬉しかった。 ST80の開発環境「System Browser」は今のEclipseに近くて（ていうかEclipseの元ネタ）、もちろんシェルなんて無骨なものはなくて、エディタ上のソースをメニューからsaveすると勝手にコンパイルされます。スペルミスがあったりするとポップアップが出て、「CollectinをCollectionに直していい？」とか聞かれるのでOKすると勝手に直してコンパイルを続けてくれます。DWIM（Do What I Mean）ていう設計思想です。このあたりのすばらしさは、進藤達也さんのSmalltalk-80(スモールトーク・エイティ) でも熱く語られています。 余談ですが、Eclipseの前身である「IBM VisualAge for Java」の中身はSmalltalkで書かれてたってIBMの人に教えられてびっくりしたことがあります（だから重かった）。IBMは扱うプラットフォームが多すぎるので、90年代にはツールやアプリケーションをSmalltalk VMで共通化しようとしてたようです。