On 12 August 2013 18:52, Allen Wirfs-Brock <[email protected]> wrote:
> On Aug 12, 2013, at 2:22 AM, Andreas Rossberg wrote:
>> On 10 August 2013 22:15, Brendan Eich <[email protected]> wrote:
>>> Pattern matching is more precise and flexible, and that's why we considered
>>> changing destructuring (which uses the pattern subgrammar) to refutable from
>>> irrefutable. Even now with destructuring irrefutable, patterns in catch
>>> clauses, match statements/expressions, or other future forms would want the
>>> same subgrammar, as much as possible -- but with refutability.
>>
>> I'm confused now. Was there an actual decision to go back to
>> irrefutable matching? I don't see that in the meeting notes (just an
>> argument that it would be future hostile, which I strongly agree
>> with).
>
> As the meeting I reported that I had spend considerable time reviewing the 
> refutable matching strawman. it's unresolved issues, and the likely impart on 
> the specification relative to other high priority work items.  My conclusion 
> was that is unlikely we could incorporate that strawman and still meet our 
> year end spec. completion goal. Instead, I proposed we stick with the 
> currently specified destructuring semantics with a couple slight modification 
> that I had previously described in a private email exchange with you (which 
> I've copied below).

As I said in my reply, I'm totally fine with what you describe in that
mail. But correct me if I'm wrong, that _is_ refutable destructuring,
isn't it? All you seem to drop is the optional irrefutable part (the
'?' feature). That's why I am quite confused about Brendan's statement
above.

> The discussion that followed was mostly about future proofing and various 
> people trying to channel for you in that regard.  The schedule issue was real 
> and there wasn't any particular push back on that.   Based upon that 
> discussion,  plan is to update the draft to match what  what I described 
> below unless you have similar scale alternatives to suggest.

OK, I am happy to hear that the plan is to adopt your suggestion as is
(the meeting notes only list point 1, so that wasn't obvious).

/Andreas


> On Jul 17, 2013, at 3:00 AM, Andreas Rossberg wrote:
>
>> The essence of your suggestion is to defer the ? operator, is that
>> correct? I'd be totally fine with that. I'd even be happy to drop it
>> entirely. But keep in mind that we came up with it to make refutable
>> matching acceptable to proponents of sloppy style.
>>
>> /Andreas
>>
>> On 17 July 2013 00:50, Allen Wirfs-Brock <[email protected]> wrote:
>>> I've been looking at the possibility that that we may have to defer some
>>> accepted ES6 proposal if we are going to make our end of year feature
>>> complete spec. target.
>>>
>>> One of the proposal that is a candidate for deferral is
>>> http://wiki.ecmascript.org/doku.php?id=harmony:refutable_matching
>>>
>>> This was a late addition. I've already spent significant time on
>>> understanding it implications and feel that resolving open design issues and
>>> properly integrate it into the spec. is likely to take more time than we can
>>> afford right now.
>>>
>>> In addition to unresolved syntax and semantic issues mentioned in the Wiki
>>> proposal, there are a number of semantic differences between patterns in
>>> regular declarations, patterns in parameter lists, and patterns in the LHS
>>> of assignment expressions that need to be work through in the spec.  I'm
>>> also worried that decisions we make here could potentially negatively impact
>>> a future pattern switch statement if we don't also take that into account at
>>> the same time.
>>>
>>> I thinking it may be better to introduce this form of pattern matching
>>> (include the switch statement) as a complete unit in ES7 rather than trying
>>> to get it into ES6.
>>>
>>> However, doing so will requires that the currently spec'ed destructuring be
>>> made future proof. I think we can do that with a few simple changes to the
>>> current spec:
>>>
>>> 1. No implicit conversion, for example the following all throw:
>>>
>>> let {a } = undefined;
>>> let [x,...y] = "abc";
>>> (({x})=>x)(0);
>>> let {a: {x}} = {a: false};
>>>
>>> 2. unmatched property selectors in patterns throw:
>>>
>>> let {a} = {b:5}; //throws
>>> let [a,b,c] = [0,1]; //throws
>>>
>>> 3. unless they have a default value provided:
>>>
>>> let {a=undefined} = {b:5}; //variable a initialized to undefined
>>> let [a,b,c=2] = [0,1];  // a initialized to 0, b to 1, c to 2
>>>
>>> These are simple changes to make to the existing spec. My sense is that they
>>> preserve the primary desturcturing use cases (include default value
>>> assignment, particularly for parameters)  while leaving us positioned to add
>>> ? and other extended pattern features in ES6+
>>>
>>> What do you think? Would these changes to the existing spec. be enough to
>>> future proof destructuring and enable patterns in the next round?
>>>
>>> Allen
>>
>
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to