Allen Wirfs-Brock wrote:
I don't agree, probably because I'm look at ?. as an operator that evaluates to 
a special kind of  Reference.

That your alternative off-by-one in its basis case is bad enough -- it creates two error suppression points from one syntactic extension-point, it will hide bugs, it is gratuitously different from CoffeeScript, and it prevents using the ?( analogue on an unqualified identifier.

Worse, instead of leaking an observable ConditionalReference (whew!), you've opted to break the equivalence between foo.bar() and %tmp = foo.bar; %tmp.call(foo) for the case where . is replaced by ?. -- in this case your proposal does not throw while the expansion does.

The right extension for what CoffeeScript calls ?( is simply to use an unambiguous and backward-compatible extension, such as ?.( instead.

The risk is in adding precisely CoffeeScript ?. in haste without thinking 
through implications of not also having ?().  It may mean a different variant 
of ?. semantics would work better in our case.

I'm not adding anything in haste, and CoffeeScript has been around, what, three years. The haste here seems to be on the other foot :-|.

Also, I do not think we should extend Reference types in the spec if we can help it. These must boil away in optimizing implementations, always. Elaborating them risks leaks or more subtle dependencies happening as unintended consequences.

/be

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to