Specifying the Existential Operator using Abrupt Completion

Allen Wirfs-Brock allen at wirfs-brock.com
Wed May 21 09:40:12 PDT 2014


On May 21, 2014, at 5:56 AM, Andreas Rossberg wrote:

> On 21 May 2014 14:33, Claude Pache <claude.pache at gmail.com> wrote:
>> 
>> I have thought about the right semantics (and the issues) of the existential operator.
>> 
>>    user.getPlan?().value?.score;
>> 
>> The intended semantics of `?` is that, whenever its LHS evaluates to `null` or `undefined`,
>> the evaluation of the whole expression (or subexpression) is interrupted and return immediately `undefined`.
>> In other word, it may be seen as an abrupt completion, as demonstrated by the following expansion:
>> 
>>    (do {
>>        let result = user           // user
>>        result = result.getPlan // _.getPlan
>>        if (result == null)         // _?
>>            break                   // abrupt completion
> 
> Drive-by comment: This would break the switch or loop statement
> surrounding the do-expression (or be an error if there isn't any). You
> need to wrap the statements into a labelled block and break that.

Well, completion records are just a specification device and if we need a new [[type]] of abrupt completion to simplify specifying some semantics we certainly could add it.

Allen


More information about the es-discuss mailing list