2.1. コンテキスト

コンテキストは, 簡単に言えば変数・関数の名前とその実体(オブジェクト)を関連付けた「表」である. コンテキストはスタック構造になっており(コンテキスト・スタック), コンテキストが作成されるとのスタックに順に上からプッシュされ, 破棄されるときはスタックの上から順に破棄される.

スタックの最上部のコンテキストはカレント・コンテキストと呼ばれる. スクリプトで変数や関数が定義された場合,カレント・コンテキストに登録される. また,変数や関数を参照した場合はまず始めにカレント・コンテキストが参照されるが, そこで定義が見つからなかった場合はさらに下層のコンテキストが順に探索される. もし最下層のコンテキストまで探索して見つからなかった場合は,実行時例外が発生する.

異なるコンテキストで同じ名前を登録した場合,上層のコンテキストで定義されている名前は, 下層で定義されている名前を隠蔽する.

インタープリターが起動したときに, 自動的にグローバル・コンテキストが作成される. グローバル・コンテキストはコンテキスト・スタックの最下部に常に存在しており, 多くの標準モジュールなどがこのグローバル・コンテキストに登録されている. 関数が呼び出されると新たなコンテキストが作成される. 関数からreturn文や例外処理で抜けた場合,その関数のコンテキストが破棄される.