■
ちょいと気分が乗ってきたので久し振りにILogScriptいじる。
とりあえず、飽きるまでは高速化してみよう、ということで、いくつかの「面白いけど、あんま役に立たない機能」を削ってしまうことにしよう。
今日削ったのは、関数と循環継承。
まず、前までは、関数は、"call"がデフォルトで定義されてるだけの普通のオブジェクトだったんだけど、この機能は得られる物の割に、失うパフォーマンスのほうが大きいので削除。これで定義した関数の中身をあとから変更する、なんてことができないようになった。
んで、循環継承。
プロトタイプな言語では、
var x = new obj; var y = new obj; x.parent = y; y.parent = x;
こんな感じであっさり親子関係を循環できる。けど、これ、プロパティの検索方法が超面倒になるので、削除。というか、JavaScriptが循環継承したらエラーになる仕様になってたので、それにあわせておく。
あんまり変わらんと思ってたんだけど、これやっただけで前回のアレが1.8秒だったのが、なんと1.3秒に。ちょっと変わりすぎです。打倒Ioしちゃったよ。
Ioはひょっとして遅いんじゃないか…まあ、Ioは親子循環可能にしてるのでそこらへんの違いだと思う。
あと、ILogScriptでは、メンバアクセス演算子が、ややこしいことしてるので、
obj.x + obj.y
というのが、
obj.(x + y)
こんなふうに書けたりして、だから、なんだ、という話なんだが、これも得られる物のわりに失うパフォーマンスが大きいのでやめておく。いや、ほんと、だからどうしたという話なんだけど、これ、実装してて、自分でも気付かなかったので、ちょっと面白かった、とか、そういう話です。気にしないでください。