[Fwd: Fail-fast on non-existing [[Get]]]

Yehuda Katz wycats at gmail.com
Wed Oct 17 13:40:53 PDT 2012


On Wed, Oct 17, 2012 at 2:55 PM, Brendan Eich <brendan at mozilla.org> wrote:

> Tom Van Cutsem wrote:
>
>> 2012/10/16 Herby Vojčík <herby at mailbox.sk <mailto:herby at mailbox.sk>>
>>
>>
>>     I see two solutions:
>>       - add something to the freeze, seal, preventExtensions family which
>>     would set an object to the fail-fast [[Get]] state.
>>       - use a Proxy in the proto chain to trap the unknown [[Get]] and
>>     throw early
>>
>>     Do you think this needs a solution at all? If yes, which option would
>>     you favour?
>>
>>
>> The second option is easy to accomplish but pretty invasive since it
>> requires you to inherit from a particular object. If you have an
>> abstraction that already inherits from something else, you're hosed.
>>
>> Personally, I'm not convinced this is a big enough problem to warrant
>> another "mode" for Javascript objects.
>>
>
> This has come up in TC39, and on this list. Waldemar would like a way (not
> the default) to seal a class so typo'ed member names throw:
>
> https://mail.mozilla.org/**pipermail/es-discuss/2012-May/**022837.html<https://mail.mozilla.org/pipermail/es-discuss/2012-May/022837.html>
>
> However, since then, I recall hearing Waldemar say that the private
> at-name syntax in classes (for him) made the case that maximally minimal
> classes hang together in ES6, without any "const class" or sealed class
> option.
>
> I agree it's not a big enough problem to add a "mode" or anything like
> that. Opt-in by class could be helpful. TypeScript has its optional member
> syntax (?:) and can give warnings. It seems to me this kind of tool-time
> help might be enough.


As I understand it, the idea is to allow gets only after a prior set.

There is a mode in Ruby that warns if you try to access an uninitialized
instance variable, but people consider it annoying because it breaks common
patterns (and in Ruby, unlike JavaScript, ||= is an operator, so it can
skip warning in that case). I suspect that people trying to use objects
that threw when trying to get uninitialized property would be extremely
frustrated, and rightly so.


>
>
> /be
>
> ______________________________**_________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/**listinfo/es-discuss<https://mail.mozilla.org/listinfo/es-discuss>
>



-- 
Yehuda Katz
(ph) 718.877.1325
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121017/f50a00f9/attachment.html>


More information about the es-discuss mailing list