Skip to content

スコープがTemporal window #877

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions