Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

スコープがTemporal window #877

Open
uzmoi opened this issue Dec 14, 2024 · 1 comment
Open

スコープがTemporal window #877

uzmoi opened this issue Dec 14, 2024 · 1 comment

Comments

@uzmoi
Copy link
Member

uzmoi commented Dec 14, 2024

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

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

できればLexical Windowにしたい
私自身関数内で外部変数を参照する使い方をよくするので

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

No branches or pull requests

2 participants