#:g1: Lispとエディタ (5)

Posted 2015-07-12 01:48:33 GMT

延々と続いていますが、今回は、1980年代のLispとエディタについてです。

さて、1980年代位になると単体のエディタが注目されることも少なくなり、代わりに開発環境というものが追求されるようになります。
ということで、Lispとエディタというテーマでは、この辺りで一段落してしまう、という印象です。

1980年代前半位までの開発環境については、当時の状況を纏めた、Interactive Programming Environments / David R. Barstow, Howard E. Shrobe, Erik Sandewallという本が出ていますので、興味のある方は読んでみると面白いと思います。
ソフトウェア開発支援環境―UNIXからAIアプローチまでという和訳も出ているようです。

辺りのトピックは、1980年代前半に良く考察されていたらしいことが分かります。

構造エディタ vs 汎用エディタ

1980年代前半位までは、構造エディタ vs 汎用エディタで競っていたことがあったようですが、後から振り返ってみるとこの辺りで汎用エディタに軍配が挙がってしまったようです。
構造エディタも汎用エディタでできることは可能だった筈ですが、特化したエディタは特化した用途以外には使いづらい、という印象が勝ってしまったのでしょうか。

上記の、Interactive Programming Environmentsの中のSandewall氏の論文「Programming in an Interactive Environment: the “LISP Experiments”(PDF)」では構造エディタと汎用エディタを比較したりしていますが、これに対してrmsがEmacsの立場から反論したりしています。
残念ながらPDFで読める版にはrmsの反論は載っていませんが、主な反論内容は、構造エディタ推しの内容に納得できないというものです。
Sandewall氏からの返答も載っていますが、そんなことはないよというもので、rmsの指摘も論文中に挙げているものが殆どだとしています。

まあ、今からすると、こういう戦いもあったんだなという話ですが、Emacsの方もS式編集では、構造エディタ的な動きもするわけで、RISC vs CISCのように、CISCだったIntel CPUもRISC化してしまった話に近いものを感じます。

Lispの開発環境とエディタ

1984年にCommon Lispが決まり、Common Lispは商用化の道を歩み出しますが、当時は現在のようにソフトウェアがインターネットでなんでも配布されるような時代ではないので、開発ベンダーがパッケージを売るという形態です。

Common Lisp 開発環境でのエディタ

ベンダーごとに他と差別化を図るためにそれぞれ特色があるのですが、Common Lisp単体で販売されるということは、ほぼ無かったようです。

大抵、開発ツールが付いてくるのですが、品揃えを眺めてみると、やはり当時先端を走っていたLispマシンを追い掛けるようなものが多いようです。

メインとなるのは、やはりエディタですが、大抵Common Lispで実装されたEmacsが付いてきます。
一覧にするとこんな感じです。

ベンダー エディタ
Symbolics/LMI/TI Zmacs
Spice Lisp Hemlock
VAX LISP VAX LISP Editor
NIL Steve
Lucid CL Helix
MCL Fred
Allegro CL Emacs
TAO/ELIS Zen
poplog VED

それぞれどんな感じかというと、

Symbolics/LMI/TI: Zmacs

ZmacsはZWEIとほぼ同じなのですが、Symbolicsが商用化にあたって名前をZmacsとしたようです。
といっても競合のLMIもTIもZmacsという名前なのが不思議な所。
今のSLIMEとほとんど変わらない感じです。

Spice Lisp: Hemlock

Hemlockは今でもCommon Lispで実装されたEmacsとして、そこそこ知られていますが、元々はSpiceプロジェクトで良く使われたエディタのようです。
Spiceプロジェクトは、Altoのような個人用コンピュータ環境についての研究だったようですが、プロジェクトで使われたPARQも、プロジェクトの想定として汎用アーキテクチャの採用を指向していた割には、プログラマブルなマイクロコードを持つマシンだったようなので殆どLispマシンのような感じになっています。
XGAからSXGA位のビットマップディスプレイにGUIの環境というものですが、Hemlockも大体Zmacsという感じです。

VAX LISP: VAX LISP Editor

VAX LISPはウィンドウシステムで使うことも想定されていますが、どうもターミナルで使う方をメインに考えられていたようです。 VAX LISP Editorは、汎用のエディタですが、LISPモードがあって、Common Lispからは、(ed 'foo)で呼び出せ、エディタから式を評価し、結果をエコーバックすることも可能なのでエディタ画面から切り換えずに結果を確認しつつ書いて行くことも可能。
式単位でも移動等もサポートしていて、EmacsのLISPモード的なことは大体可能です。
キーバインドもLispからカスタマイズすることが可能だったのでEmacsのキーバインドにすることも不可能ではない感じです。

NIL: Steve

Common Lisp(NIL)+Flavorsで実装されたEmacsです。
詳細は不明ですが、LMI Lambdaのソースコードに残されたSteveのソースを眺める限りは大体他と似た感じなのではないかと思います(C-M-cで式をコンパイル等々)
ちなみに、NILEというものあるらしいです。

Lucid CL: Helix

Helixは、Lucid社がカスタマイズしたHemlockで、ウィンドウシステムとターミナルで利用可能です。
これも試してみた所では、他のLispで実装されたEmacsと変わりないと思います。
1990年位から、Common Lisp+Emacs(Lucid Emacs/XEmacs)の組み合わせに移行してゆきます。

MCL: Fred

Fredも元々はHemlockですが、MacintoshのGUI環境に上手く統合されています。 使い勝手は他のLispで実装されたEmacsと似た感じです。

Allegro CL: Emacs

現在のAllegro CLの始まりは、1986年発売のTektornix 4400シリーズ(Smalltalkで有名なマシン)向けのTek Common Lisp(Extended Common Lisp)です。
exclとして今でもパッケージ名に形跡を残していたりしますが、Tektronix 4400シリーズのカタログを眺める限りでは、当初はUnipress Emacs(所謂Gosling Emacs)と連携して使えたようです。
GNU Emacsが登場すると、GNU Emacsとの連携を強化する方向になり、現在のELIにつながります。

TAO/ELIS: Zen

Zenは、TAO/ELISで記述されたEmacsで、全面的にTAOのオブジェクト指向な機能を使うことをテーマに製作されたもののようです。
また、Lispマシンのメリットを活かす試みの一環で、エディタ自体を部品化し、他から呼び出して使うことも想定していたとのこと。
Emacs利用者にはお馴染のSKKは、Zen上のKanzenから影響を受けて作られたものとのことです。

以上、なんとなくですが、1980年代のCommon Lispには大抵Common Lispで実装されたEmacsが付いてきていた、という感覚がというのが分かるのではないでしょうか。

EmacsとLisp

GNU Emacsは拡張言語にEmacs Lispを搭載しているので、Lispの文脈で語られることは多く、Lispが書けないとEmacsは使えないといわれたりする程ですが、個人的には、EmacsというエディタはTECOの実装の時点でほぼ機能は完成していることからして、拡張言語にLispを使ったことによるEmacsのLisp化/Lispからの影響、というのはあまりないように思います。

しかし、Lispで実装されたエディタは圧倒的にEmacsが多いというのはあるので、Lispでエディタを作るとEmacsを作ってしまうことが多い、というのは歴史的な事実ではあるようです。
つまり、Emacsが好きな人がLispを好きだとは限らないが、Lispの人は大抵Emacsが好き、ということですが、これは今でもなんとなく続いているような気がします。

Franz Lisp と vi

さて、Emacsは良いとして、vi派はどうしていたのだろうというと、BSD Unix が主戦場だったFranz Lispでのメインエディタだったようです。
viの%などもこの時期に加えられたコマンドとのことですが、詳細は不明です。
Common Lispに、(ed)があるように、(vi)や、(ex)という関数があり、Lispからエディタを呼べたようです。
Franz Lispのコードを眺めれば、viでLispを編集するとどういう感じになるのか、は窺い知ることはできるのかもしれません。

INTERLISP方面

Interlisp方面も1980年代にはLispの専用マシンの方向に進化して、Interlisp-Dとなります。
Interlisp-Dでも構造エディタが使われていますが、以前よりイメージ指向の環境と統合されています。
BBN-LISPからの流れを受け継いでInterlisp-DでもLispコードが定義されたファイルを開くという感覚は薄く、(edit ...)を実行するとエディタの窓が開くので関数定義の記述を編集する、という方式です。
仮想Interlisp-D環境で、Lispの関数を編集している動画があるので、これを眺めると、どういう感じかが大体分かると思います。

この動画にもありますが、インデントのことはエディタに完全にお任せでどんどん書いていく、という感覚はなかなか気持ち良いです。

基本的に整形はシステムまかせなので、整形についてあれこれ気にしなくなる傾向は強いと思います。

まとめ

 1980年代は開発環境が急激に進歩している感じではあるのですが、開発環境のことを書いていると話が終わらないのでエディタに絞りました。
開発環境については別途単体機能ごとに歴史的な発展を眺めてみたいと思っています。

次は、ほぼ現状と変わらない感じですが、1990年代を眺めてみたいと思います。


HTML generated by 3bmd in SBCL 1.2.13

comments powered by Disqus