programming-languagecompiler-design
例えば似た変数名の候補を返すとか、スコープ外にある変数の候補をサジェストしてくれるような評価環境を作りたい
また、単に見つかった変数への参照を返すだけでなく、それがローカル、upvalue、global、externalなのかの区別も欲しい
これも参照を引き回すのがだるいのでSlotmapとかで実装するのがいいかもしれない
ネストされたletは1つずつ環境を作っていくが、ブロックとかで閉じたスコープを作れる
ほかにも、let-tupleや複数引数のラムダなど、単に変数-値のペアのシングルリストではなく、レベルごとに複数のペアが混ざってるような形を取りうる。
上のコードでcを評価する直前の変数環境はこんな感じ
- とりあえず親のリストへ辿る方向で探索する
- 見つからなかった(セマンティクス的にエラーになる)場合は親を兄弟含めて検索して、候補が見つかったら返す
- このときはついでに類似度検索で近いやつが否いかも探す
結局siblingを作るケースはblockでスコープ作る時だけか