HAHA!

You'll pry JavaScript from my cold dead hands!

-Mikeal

On Nov 2, 2011, at November 2, 201110:49 AM, Brendan Eich wrote:

> On Nov 2, 2011, at 9:46 AM, Mikeal Rogers wrote:
> 
>> I agree with every sentence in this post.
>> 
>> +1K :)
> 
> Switching to CoffeeScript? :-P
> 
> /be
> 
>> 
>> -Mikeal
>> 
>> On Nov 2, 2011, at November 2, 20119:05 AM, Jeremy Ashkenas wrote:
>> 
>>> On Wed, Nov 2, 2011 at 11:01 AM, David Bruant <bruan...@gmail.com> wrote:
>>> Could you elaborate on this point? 
>>> All object-lockdown I can think (non-configurability, non-writability, 
>>> non-enumerability, private names, const variables, const classes) of is 
>>> optional. Why are you against them?
>>> 
>>> I was about to say "if you're unsatisfied, create a language which doesn't 
>>> provide features you don't like, like Coffeescript", but... humm...
>>> So, why being against the introduction of features in the language?
>>> 
>>> I'd be glad to elaborate -- but since it's off topic for minimal classes, 
>>> changing the Subject here.
>>> 
>>> What draws people to dynamic languages is freedom.
>>> 
>>> And JavaScript is one of the *most* dynamic of the mainstream programming 
>>> languages. Not only can you can pass any object to any function, but you 
>>> can call a method with any number of arguments, easily modify the 
>>> prototypes of other objects, introspect on any object's properties with a 
>>> simple loop, replace any member function with a wrapped version, attach new 
>>> properties to any object ... the list goes on.
>>> 
>>> If I had my druthers, JS.next would generally embrace the spirit of 
>>> JavaScript's dynamism (and freedom), and try to push those aspects further 
>>> -- with better introspection and more flexibility -- instead of 
>>> compromising with more restrictive static languages and adding lock-down 
>>> keywords so that some programmers might "feel safer".
>>> 
>>> Let's set arguments about security and constraint guarantees aside for a 
>>> moment (although I'd be glad to have those as well), and talk about these 
>>> keywords as pure features:
>>> 
>>> "private" does not add anything new to a property. If you don't want the 
>>> property to be used outside of the class ... don't use the property outside 
>>> of the class. 
>>> 
>>> "const" does not add anything new to a variable. If you don't want to 
>>> change the value of a variable ... don't change the value of the variable. 
>>> 
>>> "freeze" does not add anything new to an object. If you don't want to 
>>> change the shape of an object ... don't change the shape of the object.
>>> 
>>> Note that Ruby, another very dynamic language, has "private" and constants. 
>>> And yet private methods can be called from the outside, with "send", and 
>>> contants can be explicitly overwritten with new values. They are simply red 
>>> tape, not concrete walls. For better or for worse, I have very rarely seen 
>>> a large-scale Ruby project that does *not* call a private method 
>>> externally, or overwrite a constant during configuration.
>>> 
>>> The recent JavaScript renaissance that we're all enjoying owes debts to 
>>> JavaScript's foresight as a "free", dynamic language. If all of the 
>>> JavaScript core object had been frozen, locked down with private methods, 
>>> and set as const properties on the global object, libraries like 
>>> Prototype.js never would have happened. Libraries like jQuery would have 
>>> been much more difficult to imagine. We might not have the new Array#map, 
>>> #reduce, #every, or #filter methods at all.
>>> 
>>> Can a free, dynamic language be abused? Certainly. Is Prototype.js 
>>> dangerous? For some websites, it can be (including NYTimes.com, where I 
>>> work).
>>> 
>>> The freedom of having every object and every property be configurable, 
>>> settable, introspectable, readable and writable, at least at the language 
>>> level, is worth the trade off. If we add const, private, and other 
>>> lock-down syntax, or make class properties private by default (shudder), I 
>>> guarantee you that many potential innovative libraries that otherwise might 
>>> spring up will never even be conceived, and frustrating situations that 
>>> could have otherwise been solved by a quick patch will instead require 
>>> convoluted work-arounds.
>>> 
>>> JavaScript should be about making it easier to write the right thing, and 
>>> not so much about making it harder to do the wrong thing. After all, the 
>>> former is purely positive, and the latter assumes that you know better than 
>>> the engineer who comes after you. In the real world, you often don't.
>>> 
>>> Cheers,
>>> Jeremy
>>> 
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss@mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>> 
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
> 

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to