Rationalizing ASI (was: simple shorter function syntax)

Dmitry A. Soshnikov dmitry.soshnikov at gmail.com
Sun Jul 25 23:46:58 PDT 2010

On 26.07.2010 4:11, Maciej Stachowiak wrote:
> On Jul 25, 2010, at 5:06 PM, Brendan Eich wrote:
>> On Jul 25, 2010, at 4:59 PM, Maciej Stachowiak wrote:
>>> On Jul 25, 2010, at 11:36 AM, Brendan Eich wrote:
>>>> Let's not go in circles. I claim:
>>>> * The horses are long gone from the barn.
>>>> * The mistake is easy to overlook even for JS coders who do use semicolons.
>>>> * The trade-off of banning ASI rule 1 first bullet to reduce desensitization and eventually reduce the incidence of this kind of bug is not a clear win, vs. migration tax into Harmony and usability problems even writing fresh code.
>>>> In order to reliably remove this hazard, we would need to ban statements from starting with '('. Perhaps we should consider doing so.
>>> Banning statements from starting with '(' would remove one of the easiest workarounds for the rules against statements starting with 'function' or statements starting with '{'.
>> Yeah, that's too harsh -- you'd have to use an operator or assign to a dummy variable or declare an initialized binding.
>> Mark's restricted production idea is on target, if we think it's worth doing.
> At least in C or C++, I've seen code like this:
> veryLongObjectName.someOtherVeryVeryLongObjectName.ridiculouslyLongFunctionName
>      (longArgument1, longArgument2, longArgument3, longArgument4, longArgument5);
> If I understand correctly, Mark's proposal would make that a syntax error in JavaScript. I'm not sure offhand if JavaScript programmers write in this style, or would find the loss annoying. Of course, you could always write this as a single very long line, or make sure that at least the open paren is on the first line, but programmers can be picky about questions of style like this.

There is interesting "declarative" pattern which looks nicer if to place 
'(' on the next line. This pattern uses self-reproducible (or 
self-replicative) function -- when a function returns itself.

Instead of imperative:

   ['w', panNorth],
   ['s', panSouth],
   ['a', panWest],
   ['d', panEast]

Can be used (just declare keys):

   ('w', panNorth)
   ('s', panSouth)
   ('a', panWest)
   ('d', panEast);

But in general, yeah, programmers tries to use '(' at the same line:



> Regards,
> Maciej
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

More information about the es-discuss mailing list