with文

Xtalはwith文の導入を考えていた時期がありました。
結論として、with文は動的型言語が持つべき機能ではない、ということになりました。


with文は確かに便利な場合もあるのですが、
時にとてもわかりにくいバグを誘発してしまいます。

withがあるjavascriptで例を書いてみます。

var n = 0;

with(object){
  size = n; // object.size = n のつもり
}

ここでもしobjectのメンバにnがあれば、
object.size = object.n;
となってしまいます。

記述したときにはobject.nは存在しなくてうまくいったとしても、
のちの変更でobject.nというメンバを追加すると破綻します。
これは発見がとても難しいバグとなります。


また、言語実装の観点から見ても、
with文は言語仕様に存在するだけで実行速度を低下させてしまう好ましくない存在です。

そもそも動的型なのであれば、

var o = object;
o.size = n;

と書けます。


with文によって得られるメリットに比べ、デメリットが大きすぎるということで、
with文は不採用となりました。