Maclisp
MacLISP(または MACLISP)は、LISPプログラミング言語の一種。初期のLISPに基づき、1960年代後半、MITの Project MAC で開発された。リチャード・グリーンブラットがメインプログラマとして PDP-6 向けのコードベースを書き、その後の保守や開発は Jon L. White が担当した。'MacLISP' と呼ばれるようになったのは1970年代に入ってからで、PDP-6 上に他の LISP 処理系も登場したためである(BBN Lisp)。
MacLISP は DEC PDP-6/10 上で動作した。当初オペレーティングシステムとしては ITS だけだったが、後には PDP-10 上の他のOSでも動作するようになった。当初の実装は PDP-10 のアセンブリ言語で書かれていたが、後に Multics 上に PL/I を使って移植されている。MacLISP では、他の言語処理系ならバージョン番号がどんどん大きくなるような大幅な機能追加が継続的に行われた。
MacLISP は数式処理システム Macsyma の実装に使われ、逆に Macsyma の一部機能が MacLISP に導入された。SHRDLU の実装にも使われ、1980年代初期まで人工知能研究でよく使われた。Planner や Scheme など他のプログラミング言語の実装ベースとしても使われた。また、Multics 上の MacLISP は、LISPベースのEmacsの実装に使われた。
MacLISP は様々な影響を及ぼしたが、現在ではほとんど保守されていない。しかし、PDP-10 エミュレータ上では動作するので、古いAIプログラムを実行してみることはできる。
MacLISP には当初、少数の決まったデータ型しかなかった。CONSセル、アトム(当時はシンボルと呼ばれた)、整数、浮動小数点数だけである。その後、配列、多倍長整数、文字列、タプルが追加された。整数以外のオブジェクトはポインタとして実装されており、そのデータ型はポインタが指したアドレスの範囲で判断されていた。
プログラムはインタプリタでもコンパイラでも実行可能である。コンパイラは変数スコープが制限される点と、CAR や CDRといったインライン処理でエラーチェックをしない以外はインタプリタと変わらない。1970年代中ごろ、数値演算性能を強化したコンパイラが登場した。これにより、整数演算ではFORTRANと同程度の性能が実現された(ただし、配列やループの実装はFORTRANの方が高速だった)。
初期のバージョンは PDP-10 のアドレス範囲である 18ビットで制限されており、様々な実装上の制限があった。Multics では、より大きなアドレス空間が使えたが、Multics システム自体が数少なかった。人工知能で必要とするメモリ量と性能が PDP-10 の限界を超えたころ、LISPマシンが開発された。このため、LISPマシン上のLISPは MacLISP の後継に当たる。その他のLISP処理系も様々なコミュニティで作られ、最終的にこれらを統合した Common Lisp が生まれることとなった。
MacLISP という名称は Project MAC に由来しており、アップルの Macintosh とは無関係である。
参考文献
[編集]- スティーブン・レビー(著)、古橋芳恵・松田信子(訳)、『ハッカーズ』、1987年、工学社、ISBN 978-4-87593-100-3