Removing __proto__ is both naive and misinformed for several reasons.

Further, there is nothing in Domenic's dict project that suggests the
presence of __proto__ is itself a problem. At best, it implies its use will
somehow "ruin your day" with a link to a google docs bug[1] that merely
illustrates the need for Object.create(null), which has *nothing* to do
with Google Docs *using* __proto__. It also doesn't address any of the
functionality __proto__ provides, which is of course expected b/c that's
not the point of the dict module.

To be fair to Domenic, we're almost certainly recontextualizing his points,
so they especially don't apply here at all.

At any rate, here's a list of reasons removing __proto__ is a bad idea:

1. Node.js === V8, and since V8 has __proto__ there's plenty of code (both
libraries and application code) that use __proto__. Do you have a good
reason why having it will cause more damage than breaking all existing code
that does?

2. I really hope it's not removed from strict mode until the language
provides equivalent functionality. Think Object.create is sufficient? What
about Function.create, Error.create or even Array.create? I've had handful
of cases both in library code and application code where the best solution
was to use __proto__ and several times where it was the only solution[2,3].

3. Even if Function.create and Error.create existed, what about reassigning
after creation in cases where your application code did not create it?

Let's not fork to create a handcuffed version of the language.

Cheers,
Adam Crabtree



[1]
http://productforums.google.com/forum/#!msg/docs/0hQWeOvCcHU/13arVnFhU4YJ
[2] https://github.com/CrabDude/trycatch/issues/23
[3] https://github.com/CrabDude/proxis/blob/master/proxis.js#L121


On Fri, Sep 20, 2013 at 11:35 AM, Jorge Chamorro <[email protected]>wrote:

> On 20/09/2013, at 15:40, mks wrote:
>
> > {} is not an hash table. Object.create(null) is more likely
>
> That, *and* kill the __proto__, if not:
>
> hash= Object.create(null);
> key= '__proto__';
>
> hash[key]= 27;
> hash[key]
> null    //What?
>
> Or worse:
>
> hash[key]= this;
> 'require' in hash
> true    //What?
> 'console' in hash
> true    //What?
> 'Array' in hash
> true    //What?
>
> etc.
> --
> ( Jorge )();
>
> --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>



-- 
Better a little with righteousness
       than much gain with injustice.
Proverbs 16:8

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to