On Sep 27, 2012, at 10:54 PM, Brendan Eich wrote:

> Oliver Hunt wrote:
>> I'm generally against error on first call -- in the general case if you're 
>> able to determine a function should fail on first execution you can 
>> determine that it could fail during parsing and semantic analysis.
> 
> Ok, to play fair I should ask how you feel about any analysis that is not 
> "cheap enough" to do during a parse or lex/read pass required to lazily 
> compile functions on first call. What about binding analysis, recognizing 
> every statically resolvable use of a definition, possibly making free 
> variable uses early errors when inside module {...}?

In particular, this general concern was raised from the perspective of  an 
implementation that is trying to absolutely minimize semantic analysis during 
the initial parse phase.  Presumably it does not generate an AST at that time 
which makes it difficult to do any static analysis that isn't extremely local.  
Also, the concern was not specifically about this set of argument rules but was 
more general about the growing set of early errors that we currently have in 
the ES6 spec. Individually most early errors are probably not particularly 
burdensome to such an implementation.  But collectively, they may well be. 

Implementation diversity is a good thing and we should be careful in our 
specifications to not unnecessarily limit such diversity.   Prior to ES5 there 
were very few "early errors" (the terminology wasn't even formalized) and early 
reporting of them was optional. ES5 added quite a few new ones (particularly 
related to strict mode) and made early reporting mandatory.  ES6 is on course 
to add many new early errors. Before we go too far with this, it seems 
reasonable to stop and consider the possible impact upon implementation 
deversity of requiring early reporting of a large number of error conditions. 

I propose we call this class of errors "deferred early errors".  They are 
statically detectable errors that could be reported at "load time".  What we 
are discussing is deferring their reporting (and implicitly their detection) to 
a point where it is definitively known that the erroneous code actually is used 
by the running program. To address, Domenic's concern a "deferred early error" 
is still required to be detectable solely from inspecting a source file prior 
to execution.  If we have them, it would seem to be a best practice for any 
developer to run an ahead-of time linter over all program before deployment.  
That doesn't seem like a big burden and something that could easily be 
integrated into tool chains and development tools.

I see a potential benefit to implementor in the "deferred early error" concept 
and there are implementation alternatives that would be lost without it.  I see 
a minor negative impact to developers.  They would need to take an extra 
pre-deployment action in order to be sure that a ES source file does not 
violate any  ES static semantic restrictions.  To me this seems like a 
plausible cost/benefit trade-off. 

Allen




_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to