2023 03 21 - qnighy/umo GitHub Wiki

近況

実装は特に進んでいない。

宣言と文 (続き)

前回の結論がごく無難なものになってしまって、「あれ、おかしいな……?」と思っていたが、考慮漏れがあったことを思い出した。

たとえばJavaScriptで以下のようなコードを考える。

const x = f();
const y = x;

function f() {
  return y;
}

当然これは無限再帰的で意味のない結果しか返す余地はなく、JavaScriptの場合はdeadzoneとしてエラーになる。しかし、局所的には (このうち2つの定義だけを取り出せば) おかしな点はない。

この問題への対応には以下の2つの方法が考えられる。

  • 文形式の初期化を含む依存サイクルを検出し、エラーにする。
  • 文形式の初期化では宣言の前方参照を許可しない。