環境とフレームとエンクロージャ、クロージャ
- 「環境=フレーム+エンクロージャ」ということだが、
- フレームは束縛セット(キー/値ベアの集合)であって、あえて言葉を作る必要なんてない。
- 単数形の束縛(binding)は使っているのだから、binding set とか a set of binding とでも言えば十分。
- フレームって言葉は、関数フレーム(スタックフレーム)と紛らわしいし、そもそも関数フレームの意味でもフレーム使ってるし。
- エンクロージャーは、包囲、周囲、周辺とか訳すんだろうが、クロージャと紛らわしい!
- これも不要な言葉。親スコープへの参照と言えばこと足りる。
- 結局、フレームもエンクロージャーも混乱を増すだけでなくてもいい言葉。束縛セット、親スコープでいい。
クロージャはそれじゃなくても用法がゴチャゴチャな言葉なのに、
- ユーザー定義関数をクロージャと呼んでいる風がある。
- 理由は、ユーザー定義関数には静的スコープが引っ付いているからだろう。
- 確かに、関数本体と自由変数に対する束縛セットの組は、クロージャではある。
- だが、ユーザー定義関数は素直に「ユーザー定義関数」と呼びゃいいじゃん。
- 「関数本体+自由変数の束縛」をクロージャと呼ぶのはまーいい。
- 「クロージャ関数」なんて、バカっぽくて恥ずかしいから言えない。
- フレームのことを評価環境とか実行環境とか呼ぶのも紛らわしい。
- 評価環境は通常、クロージャの束縛部分のことだろう。ローカル変数用の環境を意味するのは変。
- 環境のルックアップでinheritsとか、誰かが喜んだり怒ったりするような言葉を使うのもどうか?
- こんなことだから、説明するほうも説明されるほうもワケワカになる。