"use subset" introductory material
Brendan Eich
brendan at mozilla.org
Mon Jun 30 23:31:08 PDT 2008
On Jun 30, 2008, at 9:08 PM, Mark S. Miller wrote:
> [+es4-discuss]
>
> On Mon, Jun 30, 2008 at 7:37 PM, Maciej Stachowiak <mjs at apple.com>
> wrote:
>> JSON be handled with a generic subset mechanism? I expect not,
>> since a
>> pragma inside the JSON source in the form of an initial quoted
>> string would
>> be (a) invalid JSON and (b) ineffective as a way to validate
>> incoming JSON,
>> since malicious alleged JSON would not use such a pragma.
>
> Whether or not it's a good idea, given "use subset JSON" as a
> recognized/enforced subset directive, one could trivially implement
> JSON.stringify(str) in terms of
>
> eval('"use subset JSON"; (' + str + ')')
That's nothing like how JSON parsing is implemented in Mozilla. If
the idea is to add a mode to the ES parser, then I'm worried about
missed exclusion tests and false economies in a hacked up JS parser
trying to serve two (or more) masters.
JSON is defined by http://www.ietf.org/rfc/rfc4627.txt -- not by
ES1-3 or any future spec. It's a "subset" of Python and other
languages -- it's more accurately its own language. It's better off
with ts own parser implementation, unit tests, etc. -- browsers want
this for application/json handling anyway (no pragma or restrictive
API mode required).
Given that JSON.stringify is a proposed extension in ES3.1 (and was
slated to be in ES4, after we rejected the old json.org API), why
does the above trivial (except for possibly non-trivial risks in
subsetting a real JS parser) re-implementation via eval matter?
>> I do think JSON should be supported natively, but it does not seem
>> at all
>> analogous to strict mode / cautious subset.
>
> I think I agree. In any case, I agree that JSON is not by itself a
> compelling case for "use subset X". My point is only that JSON is a
> huge counter-example to Brendan's statement that "profiled (subsetted)
> standards are meaningless to harmful on the web".
JSON is not huge, and that's one point in favor of keeping it
separate from ES futures. It is not defined as a subset in any ES spec.
It's also not an intentional, new-in-the-last-month, paper-spec-only
subset of JavaScript -- it is a subset after the fact. As Doug has
written, he "discovered" it. Inventing new, multiple, as-yet-unused
subsets for ES3.1 -- and not implementing any of them in any
experimental-to-beta released browser, especially not in IE8 -- is a
bad idea. It will cause general and widespread opposition to any
attempt to standardize such a ES3.1 this year.
At least OOXML and E4X (to name two Ecma standards of mixed repute)
each had one implementation -- however buggy or deficient some have
argued those specs and their single implementations were. ES3.1 has
none, not even a buggy work-in-progress reference implementation.
My point is to recall the original "ES3 + reality" anti-mission-creep
goal for ES3, which you among others espoused. Right now it's on a
road to completion at the same time frame as a cut-down ES4, which
will make for a busy 2009 -- assuming its supporters actually
demonstrate it in several testable, interoperating implementations.
> JSON was defined as
> an enforced subset of JavaScript, and it has been extraordinarily
> helpful to the web.
Except where people used JS parsers naively. Which is one variation
on a theme that you are still playing in advocating "use subset JSON".
/be
More information about the Es4-discuss
mailing list