#Script 構文変更
#Script の構文解釈を変えようかと検討中。
今の #Script 仕様では三種類の結合式の優先順位が同じ。よって、sin(pi/4)cos(pi/4) は ((sin(pi/4))cos)(pi/4) のように、a.b c.d は ((a.b) c).d のように解釈される。しかしこれではやはり不便だ。
また、関数呼び出しとインデクサ参照の二つの「関数的呼び出し」を区別する意義もあまり感じられない。
そこで先ず、関数呼び出しとインデクサ参照の二つを統合し区別しないようにする。その上でオブジェクトのメンバ参照と統合した「関数的呼び出し」の優先順位を無記号の結合式よりも高くする。こうすれば、sin[pi/4]cos[pi/4] は本来の意図である正弦と余弦の乗算として解釈できる。
また、今の仕様では a b が引数 b による関数 a の呼び出しなのか a と b の乗算なのか見た目でもコード内でも判断できない。これは、a が関数として呼び出し可能であるかどうかによって評価の仕方が変わるというややこしい仕様のせいだ。これはやはり混乱を招くと思われるので、結合式 a b は a.$chain[b] の糖衣構文として固定する。
問題は、インデクサ参照への代入をどう処理するかだ。そもそも参照型という特殊な型の存在が厄介なのだが、関数呼び出しの際に @this 値を渡すためにもメンバ参照型を無くすわけにはいかない。しかしインデクサ参照も複数の値を同時に代入する際に必要だ。しかし、インデクサ参照を関数呼び出しと統合した以上、インデクサ参照は関数呼び出しと同じ程度に早く呼び出しを評価する必要がある。
困ったな。いっそのこと、一つの式の評価結果が複数の値を取れるようにするのを止めるか。ECMAScript でも複数の値は取れないし。(a, b) = (b, a) でスワッピングはできなくなるが、インデクサ参照型をなくせるので、評価のタイミングに悩むこともないしプログラムも簡単になる。(インデクサへの代入はインデクサ参照型を使わずに直接インデクサ代入として評価する)
| 固定リンク

コメント