2020年代の視点からみたLispマシン
Lispマシンとは
簡単に説明するとハードウェアでLispの実行を支援したり直接実行するマシンです。
活躍した時期と背景
1973年あたりにアイデアが出始め、1980年にはLispマシンを製造する会社が勃興し、商用のワークステーションとして販売されるようになりました。元祖Altoの商用化が遅れたこともあり、販売されたGUIのワークステーションとしては初ともいわれますが、どうもPERQの方が早いようです。
Lispマシンが求められた背景
- 高級言語マシンという概念の流行
Lispマシンとは、簡単にいうと、Lispをハードウェアで実行したら速いのではないか、ということですが、そもそも1960年代から1970年代に掛けて、アセンブリよりも抽象度の高いFortranなどの高級言語を低レベルで実行するマシンというアイデアが試されていました。
1961年に登場したALGOLを実行するバロース B5000などが革命的なマシンとして有名です。
- 計算リソースを占用できる個人用プログラミング環境のニーズの高まり
1970年代に満足にLispを実行するにはPDP-10のようなミニコン程度の能力があるマシンが必要とされましたが、一台のマシンに何人もログインして使うような使い方が一般的でした。CPUパワーを求めるハッカーなどは、深夜の時間帯に作業することが多かったといいますが、MITでは理想のLisp環境を求めて1973年あたりからリチャード・グリーンブラット(通称RG)がトム・ナイトと協力してLispマシンを作り始めます。
また、Altoのような個人用ワークステーションを開発している方面から、開発中のワークステーションで効率的にLispを実行するアイデアの発表などがありましたが、MIT Lispマシンの潮流は直接的にはこれに触発されたもののようです。
ちなみにピーター・ドイチュ氏はLisp方面でも活躍しています。
Altoは「すべての年齢の『子供たち』のためのパーソナルコンピュータ」ということですが、MIT Lispマシンは、「すべての年齢のハッカーのためのパーソナルコンピュータ」という趣があります。
マシンの金額感ですが、当時の日本でPDP-10は数億円、Lispマシンは二千万円程度で、安価といわれるものでも五百万円程度だったようです。
Lispマシンの終焉
Lispマシンの優位性である、
- Lispの高速な実行環境
- 先進的な開発環境
は、汎用的なマシンが扱えるハードウェアリソースが潤沢になるにつれて、徐々に薄らいでいきました。
1980年代後半には、汎用ワークステーション上でのLisp実行環境も充実し始め、Lispの実行だけなら、ワークステーションの方が速い場合もでてきました。
1980年代末期や1990年代初頭に掛けて、Lispマシン陣営も新しいCPUでの再構築や、ハードウェアを仮想化する仮想Lispマシン環境、出荷先のアプリケーション動作環境では高価はLispマシンの代わりに安価なPCを利用するエコシステムなどを整備しますが、第二次AIの冬の到来とも重なり撤退や倒産が相次ぎました。
1986年にLMI(gigamos)で開発されていたk-machineの性能に後の汎用ワークステーションが追い付いたのは十年後だったそうですが、日の目を見ずに終わっています。
Symbolicsの次世代プロセッサであるSunstoneも同様に高性能だったようですがチップの製造の直前でキャンセルされています。
マシンの金額感ですが、この当時のLispマシンは五百万円〜二千万円程度、割安といわれたワークステーションでは、二〜五百万円、破格の安さといわれたPCの環境もそれなりにLispが稼動する環境を整えるとなんだかんだで当時百万円程度だったようです。
なお、Lispで構築された製品(エキスパートシステムなど)の稼動に使われるような本格的な環境ではなく、趣味人がLispで遊ぶような環境は数万円程度だったようです。
伝説の所以
当時のLispマシンの先進的な開発環境は、開発メーカーが倒産したということからも分かるように、後進のワークステーション環境には直接的には受け継がれることはなく消滅に近い状態となりました。
直接的ではないものの、後進メーカーによるキャッチアップなどはそれなりにありましたが、GUI環境や、汎用機では再現しにくい機能などは遂に追い付くことはできなかったようです。
現在、Lispマシンを伝説として語るLispプログラマは、この先進的な開発環境の優位性を主に伝説として語っています。
プログラミング技術の推移とLispマシン
Lispマシンに限らず、言語専用マシンが優位だった背景には、インタプリタとコンパイラの技術の発展が関係しています。
1970年代のアセンブリ言語と同じように、高級言語も低レベルで実行できれば速いという発想は、基本的にインタプリタが高速であればよいというものでした。コンパイル技術が現在程発展していたかったということと、コンパイラが機能するだけのマシンリソースが無かったということが相俟って専用マシンではコンパイル済みのコードの実行もインタプリタ実行も劇的な違いはなかったようです。
コンパイラ技術の発展と、それらの最適化が稼動できるだけのコンピュータリソースの向上により、コンパイル後のコードとインタプリタ実行では、劇的に速度差が開いていきます。
Lisp方面では、汎用機での稼動を視野に入れたCommon Lisp規格の広まりもあり、Common Lispはコンパイラ指向の言語となりました。コード記述は多少煩雑になるものの、Common Lisp規格が長生きしている要因にもなっているかと思います(逆に1980年代では潤沢な実行環境を必要としましたが)
具体的なLispマシンに固有と思われるインタプリタ高速化技術
- タグマシン(データにタグを付ける)化により、実行時の型分岐を並列に実行する
- 見えないポインタでメモリ参照レベルでフックする機能を活用する
- 実行時の型の不整合の検出を並列で実施(Gigamos K-Machine)
等々
日本のLispマシン
日本でもLispマシンの開発は行なわれていました。主に米国のLispマシンがハッカー御用達の個人用の先進的Lisp開発環境であったのと比べると、日本のLispマシンは主にLispの実行速度を支援する形態が多かったようです。
理研FLATSや、FACOM αなど、ミニコンに接続して利用する専用CPUのような体裁が多かったようで、理研FLATSは、主に数式処理システムのREDUCEを高速に動かすことが目的だったようです。また、FACOM αはUtiLispを高速に実行し、エキスパートシステムの開発などに利用されたようです。
しかし、日本でも先進的プログラミング環境のワークステーションの方向性が皆無かというとそうでもなく、NTTのELISなどはこちらの方向性に舵を切っており、プログラミング開発ワークステーションとしての環境の充実が図られていました。
Lispマシン上で動いたプログラミング言語
大抵のLispマシンはOSをLispで記述してありますが、Lisp OS上ではLisp以外のプログラミング言語もサポートされ製品化されていました。
主なところでは、
- Symbolics C
- Symbolics Fortran
- Symbolics Ada
- Symbolics Pascal
- Zeta-C
- Symbolics Prolog
- LM-Prolog
- ELIS Prolog
- ELIS C
- ELIS Fortran 77
等々があります。
大抵はLisp以外の言語の関数もLisp関数として実装されるため言語間のやりとりに垣根がありません。
Lispマシンの現在
歴代のLispマシンの有名所は、だいたいエミュレータが作製されています。
伝説化している先進的な開発環境の優位性を体感するには、こちらが適しているかと思いますが、現在主流の環境からすると異質なものとなっているので、ドラマチックな体験というものは期待できないかもしれません。
ただ、S式の移動の支援、括弧の入力支援、シンボルの補完のようなものは、半世紀以上前からあることがわかるので、それら無しでのLisp開発は半世紀前からナンセンスなものと考えられていたという実感くらいはできるかもしれません。
- MIT CADR
- LMI Lambda
- Symbolics Open Genera
- TI Explorer
- Portable Genera(Symbolics後継が公式に開発を継続しているが一般には非公開。Apple SilliconやAWSでの稼動が報告されている)
- Medley(Xerox Interlisp-Dの仮想マシン環境)
- TAO/ELIS(CELIS) (TAO/ELIS開発者が開発を継続しているが一般には非公開)
Discussion