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:

myApp.keys.register([
   ['w', panNorth],
   ['s', panSouth],
   ['a', panWest],
   ['d', panEast]
]);

Can be used (just declare keys):

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

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

someFunction(
   argument,
   otherData
);

Dmitry.

> 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