[2130] Re:いろいろ愚痴りたい((プログラミング言語を作る3章~5章 )
投稿者:mano
2018/05/03 16:13:46
回答ありがとうございます。(1か月ぐらいした後に消そうと思っていて、正直回答を期待していなかったので少し驚きました。)
>>p.153のダイナミックスコープの説明でnextから辿る場合、
>>仮に自身と呼び出し元に同じ変数名を定義し、自身内で変数を参照する場合、
>>先に呼び出し元の変数が検知されてしまうので、ダイナミックスコープの動きと
>>違うのでは?
>
>最新のLocalEnvironmentを起点にnextをたどって変数を検索すると、
>先に検知されるのは呼び出し元ではなく自身の方なのでは……?
>一応ver.0.2のeval.cのalloc_local_environmentを確認しましたが、
>新LocalEnvironmentのnextに、その時点でのトップのLocalEnvironmentを
>連結していますし。
>
>635: ret->next = inter->top_environment;
>636: inter->top_environment = ret;
>
>
うーん、コード読んでないのがバレました。(だって人が書いた長いコードをインタビューなしで読むのはしんどいもの。。。)で、nextの音の響きから、左から右、上から下、低層から高層(深層)の方向と想定してました。
だから、「最新のLocalEnvironmentのみから検索しますが、nextをたどって、呼び出し経路すべてのLocalEnvironmentから検索するようにすると、」の記述を、
「「最新のLocalEnvironmentのみから検索しますが、【トップレベルでの(グローバル変数に格納された)LocalEnviromnent型の変数を参照の後】nextをたどって、呼び出し経路すべてのLocalEnvironmentから検索するようにすると、」
と補って読んでいました。
なので、nextの本来の使い道はガベージ判定で、ダイナミックスコープ判定の用途でも使えることを言っているのかな?と類推していました。
ま、この部分の私の理解は大体間違っていましたね。
とりあえず、私の理解不足を棚上げしておいて、別の意味に捉えかねないnextの名前が悪い、っと愚痴っときます。(えぇ暴論ですとも。)