Skip to content

スコープがTemporal window #877

Open
@uzmoi

Description

@uzmoi

Temporal windowというのは、見えているスコープの中で直近にdefineされた変数を指す方式のこと。
ref. https://zenn.dev/qnighy/articles/f3d2d7adc75948

現状のインタプリタはTemporal windowであり、これは実行時に識別子がどの変数を指すかが変わってしまう。
具体的には以下のようなコードで、関数を呼び出すタイミングによって参照する変数が変わる。

let hoge = 0
eval {
  @f() { hoge }
  <: f() // 0
  let hoge = 1
  <: f() // 1
}

https://aiscript-dev.github.io/ja/playground.html#N4Igxg9gJgpiBcIA2MAuACAFhA5jdAvOgAwA6AdjAG4CGS6wF66AAgGYAUAlA1rvgF8m6ADzx0nHgHopJYSgzY8hdAEZhYid3Qy1FASAFA

関数が定義された時点で参照する変数を決定するTemporal Dead ZoneかLexical Windowにするべきなのでは

Temporal Dead Zone

  • 一回目の呼び出しの時点でeval内の変数を参照しようとして参照エラーを出す。
  • JavaScriptと同じ。

Lexical Window

  • 二回目の呼び出しでも外側の変数を参照する。
  • 関数が定義された時点で宣言されていない変数には触れない。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions