Early error on '0' followed by '8' or '9' in numeric literals does not seem to be web-compatible

Mark S. Miller erights at google.com
Thu Aug 7 08:32:11 PDT 2014


The web seems unable to shed its past. In the absence of opt-in (either
"use strict";, classes, or modules) legacy web code will probably be sloppy
forever. In sloppy mode, you can probably use "with" forever as well.



On Thu, Aug 7, 2014 at 8:23 AM, Alex Kocharin <alex at kocharin.ru> wrote:

>
> 07.08.2014, 18:51, "Mark S. Miller" <erights at google.com>:
>
> On Thu, Aug 7, 2014 at 7:08 AM, Alex Kocharin <alex at kocharin.ru> wrote:
>
>
> 07.08.2014, 09:49, "Mathias Bynens" <mathias at qiwi.be>:
> > On 7 Aug 2014, at 02:46, Bill Frantz <frantz at pwpconsult.com> wrote:
> >>  On Tue, Aug 5, 2014 at 7:56 AM, Mathias Bynens <mathias at qiwi.be>
> wrote:
> >>
> >>  ...
> >>>  In section 11.8.3 (Numeric Literals), the definition for
> >>>  `DecimalIntegerLiteral` should somehow be tweaked to match that of
> >>>  `DecimalDigits`, with the exception that if the first digit is `0`
> and all
> >>>  other digits are octal digits (0-7) it must be treated as a legacy
> octal
> >>>  literal.
> >>  So this horrible footgun, changing the value of a constant changes its
> radix, is only lurking in sloppy mode.
> >
> > It affects strict mode code too in existing implementations: there you
> go from not throwing on e.g. `0123456789` (which is not an octal literal
> because of the `8` and `9`) to suddenly throwing a syntax error when the
> value changes to `0` followed by only octal digits (as then it is an octal
> literal). See my previous posts in this thread.
> Throw if value is ambiguous (i.e. `052`), don't throw if value is
> unambiguous (i.e. `05`, `082`). Looks good to me.
>
> It is not compiler job to prevent bad code style, it's what linters should
> do.
>
>
> It is partially the job of strict mode to prevent some egregiously
> confusing constructs. There is a line to draw between what strict mode
> prohibits and what linters warn about. But there's no one line statement of
> principle that captures this. Strict mode prohibits "with" and some other
> constructs that make it especially hard to reason about programs.
>
>
>
> Well, then the question is this. Is strict mode optional or mandatory to
> use? Will a developer always have a choice not to use it?
>
> If it is optional like it is now, that's fine.
>
> But if it is going to become the only es mode in the future, it should be
> extended as much as possible, leaving linting job to linters. Including
> confusing "with", because it have its uses in template engines.
>
>



-- 
    Cheers,
    --MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140807/9472f92d/attachment.html>


More information about the es-discuss mailing list