Existential operator (was: ||= is much needed?)

Brendan Eich brendan at mozilla.org
Tue Jun 19 12:21:12 PDT 2012

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.


More information about the es-discuss mailing list