>簡単に実装するなら、Lisp系言語などが楽でいいのではと思いましたが、
>どうでしょうか。普通の言語に比べて、構文がちょっと特殊ですが、機能
>拡張がわりと容易ですし、言語設計の面白さは十分に味わうことができるの
>ではないかと思います。
うーん、私はLispはEmacs Lispやxyzzy Lispで遊んだ程度ですので、
Lispそのものについては何も言いませんが(Paul Grahamのエッセイは日本語訳された
範囲ではたぶん全部読んでますし、Lispを悪く言うつもりはないですが)、
いわゆる「普通のプログラマ」に馴染みが薄いというのは確かだと思うわけです。
んで、この辺のスレ
http://pc8.2ch.net/test/read.cgi/tech/1106129164/
とか見るにつけ、「Lispなら処理系作るの簡単だよ」というアドバイスがちょくちょく
あって、それはそれで嘘ではないと思うのですが、yaccなりJavaCCなりの
コンパイラコンパイラが使える環境なら、多少の構文の複雑さは問題にならない
はずです。だとすれば、初心者さんにとって、馴染みの薄いLispの勉強と、
言語処理系の作成というふたつのことを同時に勉強させるのは酷というものでは
ないでしょうか。
もっとも、何かを理解しようと思ったら、それを作ってみるのが一番手っ取り早い
とは思っていまして、Lispを勉強したい人に「じゃあLispを作ってみようよ」という
提案は有効だと思います。でも、言語処理系を作ってみたい、という人が、
本当に作りたいのは、Lispなんでしょうか。
>基本的なアイデアとしては、いわゆる「単純委譲」をコンパイラが自動生成する
了解です。
ところで、この形式で、MyListはArrayListなんでしょうか。
そうだとすれば、多重継承を許そうとすると、「ArrayListインタフェース」のような
インタフェースをたくさん作らなければならないような気がします。
>で、問題になっている環境へのアクセス方法ですが、クロージャから外側の
>環境にアクセスしていることをコンパイラが検出したら、外側の環境での変数
>へのアクセスをObject型配列の要素に対するアクセスに変換して、Object型配列
>への参照を、クロージャに渡すという方法を取ります。
ええと、クロージャが再帰した時はどうなるのでしょうか。Pascalの
スタティックリンクのような仕掛けがないと困るような気が…
すみませんよぱらいなので頭動いてないです。
ちなみにですが、crowbarはJavaScript的に環境ごとに連想配列を持ち、
外側環境へのリンクを持とうと思っています。