言語は少なくとも4つの層に分割されるべきだ:
- カーネル言語は単純で実装しやすいものとなる。どんなケースにおいても、動的な再定義は再考を加えて、このレベルでのサポートが必要かどうかを判断するべきだ。私は再定義可能なものがカーネル内に必要だとは思わない。
- 言語を肉付けする言語学的な層。この層は実装上の困難が若干伴うかもしれない。そしてここには多分、カーネルで実装するには高価すぎるが割愛するには重要すぎる動的な側面が含まれることになる。
- ライブラリ。Common Lispにあるものの大半はこの層に置かれる。
- 環境として提供されるエピ言語的機能。
個人的な妄想ですが、純 Lisp + いくつかのプリミティブ、マクロ、リーダーマクロ、継続を用意して、残りを全部それ自身で実装して行くのって楽しそうだなーなどと思います。
ところで、純 LISP を作れば、Lisp の他の機能はすべて実装できるって話がありますけども、実際やった人いるんでしょうか。本当にできるなら、それはそれで面白そうかも。
もしかして、純 LISP で 純 LISP + α を実装して、さらにその LISP で機能追加した LISP を実装して・・・の繰り返し、ということなんでしょうか。。
0 件のコメント:
コメントを投稿