2023 03 21 - qnighy/umo GitHub Wiki
近況
実装は特に進んでいない。
宣言と文 (続き)
前回の結論がごく無難なものになってしまって、「あれ、おかしいな……?」と思っていたが、考慮漏れがあったことを思い出した。
たとえばJavaScriptで以下のようなコードを考える。
const x = f();
const y = x;
function f() {
return y;
}
当然これは無限再帰的で意味のない結果しか返す余地はなく、JavaScriptの場合はdeadzoneとしてエラーになる。しかし、局所的には (このうち2つの定義だけを取り出せば) おかしな点はない。
この問題への対応には以下の2つの方法が考えられる。
- 文形式の初期化を含む依存サイクルを検出し、エラーにする。
- 文形式の初期化では宣言の前方参照を許可しない。