#:g1: Lisp都市伝説を検証する: KCL登場以前にCommon Lispの処理系は存在しなかった、は本当か

Posted 2016-02-01 14:35:08 GMT

KCL(Kyoto Common Lisp)は、1984年に登場したCommon Lisp処理系です。
名前にKyotoと冠するように日本発の処理系で、湯浅太一先生と萩谷昌己先生の御二方が中心となって作製されました。 この処理系に思い入れのあるユーザーは日本には多いようですが、無償で配布されたため日本の大学等で広く使われたようです。
KCLは後に、テキサス大学オースティン校のBill Schelter氏によってAKCL(Austin Kyoto Common Lisp)としてメンテナンスされ、そこからGNUに引き継がれ、現在GNU Common Lispとして知られています。
派生の処理系は沢山あるのですが、KCL系の処理系でANSI Common Lispに準拠したものとしては、ECLやMKCLがあります。

さて、そんなKCLなのですが、「KCLは世界初のCommon Lisp処理系なんだよ」などという話を良く耳にします。
その他色々尾鰭が付いたりしますが、

あたりのコンビネーションが大体のようです。

例を挙げると、

紫藤のWiki: GCL - GNU Common Lisp

1984年にGuy SteeleによってCommon Lisp the Languageが纏められるも、「こんなデカい仕様の言語、一体どこの誰が実装出来るんだ?」と誰もが頭に来ているところに、いきなり日本でKCLが登場したのに世界中の人々はビックリしたらしい。 従って、KCLは世界で殆ど初めて登場したCommon Lisp処理系である。

古都がはぐくむ現代数学: 京大数理解析研につどう人びと

第六章 応用の「花畑」から 第一景 Kyoto Common Lisp を作ったつわ者たち p223

『しかし、問題はあった。言語の仕様はできていても、実際のコンピュータ上で動く言語処理系としてのCommon Lispはまだ存在していなかった。設計図はあっても「建物」はまだ誰も建てていなかったのである』 正式な仕様も完成していなかった

「仕様書を読んだだけでこんな巨大なシステムを作った!?」。驚く計算機科学者は多かったという。Common Lispの処理系がまだ存在しなかった世界では、二人の「無謀な開発」に仰天したのだ。

のようなものがあります。Wikiのようなライトなものから書籍まで幅広いようですが、以下、伝説を眺めつつ検証してみたいと思います。

たった二人だけで

これはコアな部分は御二方で作製されていたようなので、そんな感じのようです。
1984年のコンピュータソフトウェア1(2)の「KCl: / 湯浅太一、萩谷昌己」という記事によれば、DG(データゼネラル)の矢部輝夫、原田年康、両氏に謝辞があります。
両氏の担当としては、マシンに依存な低レイヤー部分や、エディタ等々の作製で活躍されたようです。
開発チームの最大人数としては4人とも考えられます。

仕様を読んだけで

これは本当です。引用文献で出てきますが、

の参照のみで作製したようです。
Common Lisp Reference Manualは、正式は出版時には、お馴染のCommon Lisp the Lnaguageとなります。
Mary Poppins Ed. は完成の一歩手前のようです。
正確には、仕様の草稿を元に処理系が作られたということになり、Common Lisp the Languageの発表前に完成している謎はこの辺りに原因があります。

なお、Common Lisp策定グループとは独立して作られた処理系ということで、仕様に記述がない暗黙の規則等々を洗い出すことになりました。
「The Evolution of Lisp」でも、この点が非常に評価されたと回想されています。

世界で初めて/まだ誰も処理系を作っていなかった

これは単純に事実と違います。 上述の御二方のKClの記事でも、

米国ではPERQ上のSpice Lispをはじめ、いくつかのCommon Lispシステムがすでに稼動していると聞くが、我が国ではまだCommon Lispはよく知られていないようである。

と書かれていますが、1982年のLFPでのCommon Lispのお披露目時点で、作成中のCommon Lisp処理系として、

が挙げられています。

(前例の無い)巨大な仕様のCommon Lisp処理系を作成した

上記の最初期の処理系のうちCommon Lispの仕様の下敷になったのは、Spice Lispのマニュアルでした。
また、NILは、1979年からMacLISPの後続として開発がスタートしましたが、途中からCommon Lispとなりました。
Common Lispへの重要な影響としては、NILがレキシカルスコープを採用していた為、Common Lispもそれを取り入れることになったようです。

他にLispマシン上のLisp Machine Lispがありますが、これら大別すると3つのMacLISP系方言の共通のサブセット的なものを作ろうというのが、そもそものCommon Lispのスタートです。
共通仕様策定の動機としては、ARPA(DARPA)からLisp系プロジェクトに資金援助をしても良いけれど、それぞれ小さく分散しつつ競合しているような状況で資金援助するのは無駄で嫌なので統一して欲しい、という注文がバックグラウンドにあったようです。

そういう感じのなので、当時の人達の認識としては、Common Lispは新しい機能もあるとはいえMacLISP系の共通のサブセットであり、全く新規の前人未踏の山という認識では全然なかったといえます。

実際LispマシンのLisp Machine Lispの方がCommon Lispより何倍も大きく、NILもCommon Lispよりは大きいです。

こんな感じだからなのか「世界初のCommon Lisp処理系」という点については、そういう判断基準や価値観や興味がなかったらしく、当時の資料を沢山眺めてみても、そのような記述が全然ありません。

世界中の計算機科学者が仰天した

これは当時の熱狂を知るすべがないのですが、現在残る資料を眺めても、これが元ネタか、というようなものはありません。

1984年の6月にCommon Lispの策定グループにKCLのグループがKCLについてメールをしたようなのですが、ここで初めてCommon Lispの策定グループに認知されることになったようです。
最初の報告を受けてFahlman氏は、Spice Lispキットのコードを元に移植したのだろう、と勘違いしていたようですが、策定グループとは全く別個にスクラッチで書かれたと知り賞賛していたようです。

There has been some confusion, partly my fault, about whether the Kyoto
University version of Common Lisp is based on our portable Spice Lisp
code.  I have just received a letter from Taiichi Yuasa of Kyoto
University which makes clear that their implemenation is TOTALLY
INDEPENDENT of our code.  They did receive some early drafts of the
manual, papers, and benchmark code from us (by way of Nippon Data
General), but they did not receive any Lisp system code from us until
several months AFTER their implemenation was finished and running.  I
just wanted to set the record straight.  They apparently got this
implementation running from a standing start in five months with a team
of four people, with no direct input at all from the Common Lisp
designers -- an awesome performance.

To further clarify things, Data General has their own implemenation for the Eclipse. This is the one that was demonstrated at AAAI, and it IS based on our code, though the task of porting it to Data General hardware was done with essentially no help from CMU.

-- Scott

当時、Common Lispの普及の一環として、Spice Projectでは、Spice Lispのコードのマシン依存の部分を書き換えたり、付け足したりすれば動くようなCommon Lispのキットを配布していたようです。
このキットを利用した処理系としては、上記のVAX LISP、TOPS-20 Common Lisp等々があります。
また、bit Vol.17 No.6 1985: Common Lisp 入門(3)によれば、SymbolicsもCommon Lispのエミュレータを配布していたようで、新しく提案される仕様を検証する上で両者は中核になっていたようです。

こういう背景があるので、これらのキットを利用していないこと、また、Common Lispの策定グループとのやりとりもなく仕様書のみで短期間で実装されたことが賞賛された、という所のようです。

とりあえず、実現できるかも分からない巨大な仕様を初めて動くものとして提示して世界を驚かせた、という感じではないことが分かると思います。

まとめ

KCLの業績は偉大です。
偉大ではありますが、世のKCL伝説は想像が多々混じっているようで、ちょっと誇張しすぎな所もあるかなと思います。
実際に、湯淺/萩谷先生の報告では、そういう誇張は一切ないので後の人々が伝説化してしまったのだろうなと想像しています。

ちなみに、当時のKCLの記録は面白いの読んでみては如何でしょうか。


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus