その昔、Lispを実行することに特化したマシンがありました。Lispマシンと呼ばれたそのマシンは、当時の人工知能ブームの後押しを受けて盛んに製作されていたそうです。MIT AIラボのCONSマシンやCADRマシン、それに日本でもいくつかつくられたようです。

Lispが好きでたまらない人間には夢のようなマシンです。いろんなLispマシンの記事を読んでいると、Lispを実行するための高速化の方法とか、OS自体がLispで書かれていてREPLでOSを直接設定できるとか、ほんとうに夢のよう。

ところで神戸大学には、そこでつくられたLispマシンが飾られている場所があるらしいです。日本でつくられて、それも高性能だったLispマシン、一度はこの目で見てみたいなーと考えていました。

そんなところに第7回関西Lispユーザ会の開催告知が。神戸大学で、Lispマシンの開発者である先生をお招きして、Lispマシンの見学会まであるですって。

これは見に行かないと人生損だなよ。

……そんなわけで、第7回関西Lispユーザ会に行ってまいりました。

関西Lispユーザ会とは

関西Lispユーザ会は、関西でLispを使う人たちの集いの場です。Lispってたのしいんだよ、ということを広めていくためにOpen Source Conferenceに出典したり、今回のように発表の場を設けたり、このごろはもくもく会を開催したり、と精力的に運営されています。

この日のイベントスケジュールは以下を参照していただきたいのですが、会場は神戸大学の講義室の一室でした。いいキャンパスでした。

kansai-lisp-useres.connpass.com

また余談ですが、神戸大学出身の知り合いから聞いていた事実がつぎつぎに証明されていくのでとても楽しかったです（大学までが登山（ほんとに坂がきつい）、イノシシが出る（ウリボーロードという道がある）、など）。

会では、発表（LT, Lisp Talkの略）の合間に休憩があって直前の内容について議論したり雑談があったりというのは新鮮だなーと感じました。とはいえ、shibuya.lispのLisp meetupでも発表者入れ替わりの合間に雑談は入るので、関西弁によるノリが新鮮だったのでしょうか。

発表

Past and Future of CG on Lisp

docs.google.com

まずはympbycさんによる、Lispとコンピュータグラフィックスの話です。

Lispといえばだいたい「人工知能」「Webアプリケーション（Paul Graham）」「ゲーム（クラッシュバンディクー）」と認識されることが多いですが、じつはコンピュータグラフィックスの言語だったこともある、というふうに話が始まります。SymbolicsがCGの部署をもっていたり、Lispで3Dモデルの作成やそれによるアニメーションの製作に使われていた時代もあったよね、と。

しかし、いまは

Lisp CGの冬 (1999~現在)

GPUの進化により並列で行列計算を行い、昔はレンダリングするのに何十時間とかかっていたレイトレーシングも、いまやリアルタイムでできるようになりました。いまやモデルそのものアニメーションそのものをすべてシェーダで生成してリアルタイムレンダリングする時代です（参考: shadertoy）。そんな「冬」の時代のコンピュータグラフィックスとは……。

シェーダをLispで書く

それを実現するのが、このライブラリ、CEPL。

github.com

このライブラリは、Common Lispのマクロで記述されたLispっぽいコードを、OpenGLのシェーダ言語GLSLにコンパイルし、REPLからシェーダを書いてOpenGLの中へつっこむことを可能とします！！

たとえばこれは、リアルタイムで描画されるLispエイリアンのデモ動画です。

www.youtube.com

たとえばこれは、実装途中のものですがレイトレーシングです。屈折・反射をリアルタイムで描画しています。もちろんCommon Lispで！！

www.youtube.com

おもしろいですね。ちなみに応用としては以下のようなものが考えられるそうです:

物理シミュレーション

ライブコーディング

GLSLをエクスポートして… Unityで利用 shadertoyに投稿

科学計算

すごいですね。ぼくはShadertoyにアカウントつくろうとしたらそのときの貰いものGPUが古くてできなかった苦い思い出をお持ちなので、こんどこそトライしてみようと強く感じました！

ところで、おもしろかったのがympbycさんが過去にされていたことで、Haskellの影響を受けたカリー化された関数によって特殊形式が存在しないLisp処理系Carrotや、Serial Experiments Lainに出てくるCommon Lispコードを特定した記事、Smalltalk勉強会に行っていた話（その人が歴史、みたいな人がいる）、3Dプリンタをピックアンドプレースマシンに改造した、などがありました。つよい。

Julia is your friend

つぎはfu7mu4さんの、プログラミング言語Juliaの話です。

Juliaといえば、科学計算向けの動的言語で、Nimのライバル（ではない）ですね。発表によると、Juliaを開発した動機にはいろいろなものが挙げられていますが、とくに（Lisperに）強調しておきたいのは、

Lispのような真のマクロが使える同図像性のある言語

という点です。これは、これは。Lispじゃん？ ねっ？ という。なので、Lisp使いには親和性が高い言語なのです、と続きます。

具体的には、シンボルがあり、式を表現するオブジェクトを生成・操作できてしかもS式っぽいかたち。そして、式を表現するオブジェクトがあるのなら、それを返す式だってあるよねということで式変換ができ、それならコンパイル時に実際に式変換を適用するこができるよねということでマクロが登場し、Juliaは完全にLisperに対してフレンドリーです。この言語、ちょっと触ってみたいなと感じました。

ちなみにNimとJuliaのマクロまわりの違いについてのぼくの印象は以下のような感じ:

神戸大学Lispマシン、FAST LISPとAIに関わる私的技術史

そして最後に、FAST LISPを開発された瀧和男先生によるお話です。

高校生のころから電子工作をされご自分でコンピュータをつくってきたという流れの7番目に位置付けられる、FAST LISPマシン。開発の動機としては次のようなことを述べられていました（意訳）：

ハードウェア・ソフトウェア両面の実装の苦労話等を設計図とともにお話いただいたのですが、ぼくはハードウェアのほうがからっきしだったため、記憶にあまりのこっておらず…。ただ、インタプリタのコードの雰囲気は、実装したことがあるのでなんとなく覚えていますが…。もっと頭に叩き込んでおけばよかった…。

そしてLispマシンの話へ。MITのCONS、CADRマシンがつくられてSymbolics社とLisp Machine社に分かれた話とか、一方でXeroxのInterlispとか、さらに一方日本のLispマシンのとくにFAST LISPの系譜に連なるFACOM α（富士通）やELIS（電電公社）に言及がありました。ここらへんの話はとっても興味があるので、一冊の本になったりするとぼくは超絶よろこびます。

そして第五世代コンピュータに関わった話やベンチャー企業の社長をやった話を経て、現在やっている人工知能の応用プロジェクトの話に移ります。現在の人工知能分野には二つの系統があり、ひとつは機械学習や深層学習の系統のパターンを処理する人工知能と、エキスパートシステムやパズル・ゲームの対戦などの、ルール記述と論理推論によって記号を処理する人工知能がある、とのことでした。現在はパターン処理系のAI分野の成功が華々しいですが、これからはパターン処理と記号処理の境目に応用の爆発が起こるだろうと瀧先生は言います。

ぼくはちょうど、対話システムを開発する会社に身を置いているのでこのあたり、とても面白く話を聞いていました。

FAST LISPの見学

瀧先生のお話のあとは、FAST LISPの実機を参加者一同で見学です。道中、神戸大学の施設について瀧先生に解説いただきながら向かいました。

ここからは（たまたま）（動物を撮るために）カメラを持っていっていたので、その写真です（しかし、ISO感度の設定をミスっていて、とってもノイズが乗っていて涙目…）

まずは前面外観。これですよ！ これがLispマシン！！ FAST LISPです！！

前面には上から、インタプリタの内部状態と電源操作をするためのパネル、CPUのユニットが横一列に並んている区画、メモリのユニットが並んでいる区画があります。メモリユニット区画の下にある Ramda-16 ってなんだったか…設計図とともに説明があり、たしかFAST LISPをコントロールする用のなにかだったような気がするのですが…思い出せない…。

ちなみにCPUとメモリの電子部品は手ではんだ付けされたそうです。

フロントのパネルに寄った写真です。 7 は七代目の瀧先生のコンピュータだから、だそうです。FAST LISPでは処理系が利用するスタックがソフトウェアではなくハードウェアで実装されていたので、当時としては速くプログラムを実行できたのではないか、と考察されていました。

そして FAST LISP の文字や LISP MACHINE SYSTEM 、 TAKITAC 1979 の文字は業者に依頼したというのではなく、ご自分で写されたそうです。なんだか「ステンシル」というワードが聞こえましたがくわしくないのでよくわかりません。

あっ。ステップ実行とかどうやって操作するんだろうとあの場では思ってたんですが、右下にちゃんと RUN / STEP のスイッチがありますね。なるほどー。

懇親会

懇親会は阪急・六甲駅そばの中華のお店、六甲苑というところでした。神大出身の友人に話したら、神大の飲み会とかでもよく利用されるお店のようでした。そこで中華を頂きながら、ぼくは言語を作ろうとして低いところに下りていってるけどよくわからん、あとハードウェアよくわからんという話をしてました。そのときわかりやすくていいよと教えてもらったのがこの本です:

それにハードウェアやるならChiselというハードウェア設計言語も触ると楽しいよと教えていただきました。Chiselで書いてシミュレータ走らせるといいよ、と。

あとは法哲学や法学のことを聞いたり、LispとCGの発表をされていたympbycさんとGLSLをLispですごいですねとお話をしたり、いろいろなお話ができました。

おわりに

神戸大学のLispマシン、FAST LISPについての回ということで関西にお邪魔したのですが、それだけでなく、関西のLisperの方々に相手をしていただけたり、たのしいお話を聞けたりと、とても刺激になった関西Lispユーザ会でした。

また一年後くらい（かそれ以下か）、ぜひまた遊びに行こうと思いました。

そういえば最近Forthを実装して遊んでるのですが、

github.com

Forthがふしぎすぎてよくわからんという話をcxxxrさんにしたら、Let Over LambdaではForthを実装する箇所があってForth入門にいいですよ、と教えてもらいました。そういえば目次にForthあった気がしたなあ、読むか。