星田さんの記事に付いて。
コードを書いてC-Jで評価。
あ、CLISP使ってないんだ。
それはバッファで、実はテキストファイルじゃないです。
その評価はxyzzy内のCommon Lispのサブセットで評価してますね。
だから以下のようになる。
次に読み込んだら全然評価できない状態になってる。ファイルを保存して読み込むとdefunなど組み込み関数の色が青だったのが黒になってる。前のをコピペしても駄目で、完全にテキストエディタとしての機能しか果たさないようになってるっぽい?
うん。だから本当ならshell開いてCLISPを走らせて、(load "何とか.lisp")にせなアカンのね・・・・・・。
やっぱ環境的にはEmacs + Slimeに敵わないんだよなぁ。
しかしそう考えると昔のC言語とかやってた人はどんだけ短いのでもいちいちコンパイルしないと検証できなかったのだろうか?面倒すぎるw
しかもただコンパイルしてもダメ。必ずmain関数書かないとダメだしね。
ANSI Common Lispならインタプリタとしても使えるし、珍しく「仕様でコンパイラが定義されてる(※)」。すなわち、殆ど世界で初めての「インタプリタでも使えるしコンパイラも使える」プログラミング言語で、自在でやり方は任意で良い、のです。
1972年にAT&Tから登場したC言語はアセンブリ代わりとしては便利な言語だったんだけど、インタプリタで対話的に開発出来るLispにはある意味敵わなかったのです。「開発が楽ちん」。
逆に言うと、当時、MIT発のLisp派とAT&T発のC言語派、ヨーロッパ発祥のPascalで3分されてたのね・・・ただ、MITはさすが金持ってるせいか(笑)、この3つだと一番贅沢な環境に恵まれていた・・・・・・金持ちの為のリッチな言語、っつー側面があったのね。C言語だとそもそもショボい開発環境が前提だったわけだし(元々、C言語はAT&Tのベル研に転がっていた廃棄処分寸前のミニコンで開発された経緯がある)。
※: 以前にも書いた事があるが、実は殆どの言語仕様書だと「コンパイラにしろ」等と言う事は書いてない。従って、実装はコンパイラにしようがインタプリタにしようが実装者次第、と言う事になり、「C言語はコンパイラ型言語です」なんつー言い方は大嘘になる。
まだそんなバカな事を教えてる教科書なり先生はゴミ箱にツッコんでも良いと思う。多分、知識不足で大体ロクな事が書いてないか、教えないだろうと思う。
従って、仕様に従うと、C言語のインタプリタは「あり」なのだ。たまたま殆ど存在しないだけ、である。
一方、言語仕様で珍しくコンパイラを定義してるのがANSI Common LispとISLISPである。
それは何故か、と言うと、ANSI Common Lisp及びISLISPはコンパイル時に書かれたマクロを展開をする為、コンパイラの仕様を厳密に定義しなければマズいのだ。
そんなわけで、ANSI Common Lisp及びISLISPは「必ずコンパイラでなければならない」言語処理系である。
一方、本当の事を言うとこれら仕様書には「インタプリタにしなさい」とは実は書いていない。
結果、「インタプリタ無しの」ANSI Common LispやISLISPは実装上「あり得る」のである。