FW: javascript vision thing

kai zhu kaizhu256 at gmail.com
Sat Nov 25 07:14:19 UTC 2017


it may be standard-operating-procedure to sub-class builtin arrays in
other languages.  but it becomes awkward in javascript when time comes
around to serializing/reconstructing the custom array-type while
baton-passing it around frontend<->backend<->database via JSON.

On 11/3/17, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
> I agree with everything else you said but since you mentioned the word
> "misinformed" I'd like to improve this misleading sentence:
>
>> It's 99% sugar over the existing prototype-based model
>
> This has been one of the most misunderstood and undertaken parts of ES6.
>
> Classes are *not* just sugar, thinking about classes as just sugar that can
> be replicated on ES5 is FUD and even if I've pointed out Babel
> documentation has a wrong description of classes it's still there and 99%
> of developers believe classes are like that, just sugar over prototypal
> inheritance.
>
> This is so wrong that TypeScript fails with the most basic extend:
>
> ```js
> class List extends Array { method() {} }
>
> (new List) instanceof List; // false
> (new List).method(); // throws because it's not a List so no method
> ```
>
> To simulate ES2015 classes you need `Reflect.construct`, unavailable in
> ES5.
> Polyfilling Reflect.construct with ES5 features is not enough: you need
> Symbols too.
>
> Symbols are technically impossible to polyfill (i've gone very close, yet
> not a perfect poly).
> Symbols are needed to keep the instance so that in a transpiled world:
>
> ```js
> (new List).slice() instanceof List; // true
> ```
>
> Most developers that went for classes have broken code out of the box
> thanks to transpilers and yet at the end of 2017 we keep writing that ES
> classes are just sugar on top of ES5.
>
> We should stop starting from this ML to keep spreading this wrong
> information.
>
> Thank you all for your understanding.
>
> Regards
>
>
>
>
>
>
>
> On Fri, Nov 3, 2017 at 4:49 AM, Isiah Meadows <isiahmeadows at gmail.com>
> wrote:
>
>> Honestly, this entire thread reads as partially misinformed,
>> borderline trollbait. These kinds of questions and thoughts should
>> really be asked directly (and a bit more respectfully) to TC39
>> representatives and/or put in blog posts wherever. es-discuss is
>> primarily about language design, and although the subject implies it's
>> about the language's design in the abstract, I'm not convinced the
>> content and responses really are.
>>
>> 1. Claims of a language "civil war" don't belong on this list, and are
>> objectively false. Yes, there's disagreement, but even TC39 members
>> aren't exactly in agreement here - consider the difference between
>> Lodash/Ecmarkdown (Domenic Denicola) and Ecmarkup (Brian Terlson).
>> Please take that into account.
>> 2. Yes, there are multiple idiomatic uses of JavaScript, but it's
>> large enough you can carve out a subset and be done with it. You don't
>> like classes? Don't use them. You don't like arrow functions? Don't
>> use them. You don't like `array.map`? Don't use it. Just because they
>> exist doesn't obligate you to use them, and they don't hurt you in any
>> way if you don't. Also, complaints of a person's or group's choice of
>> idiom do *not* belong on this list whatsoever. Leave that crap to a
>> private message, a blog post (if it's a group), or whatever.
>> 3. JavaScript "classes" are not technically class-based OOP, and TC39
>> members have acknowledged this in blog posts. It's 99% sugar over the
>> existing prototype-based model, just with easier native subclassing.
>> You could in theory replicate this in the rest of the language with a
>> combination of `Object.defineProperty`, `Object.setPrototypeOf`,
>> `new.target`, and existing ES5.
>> -----
>>
>> Isiah Meadows
>> me at isiahmeadows.com
>>
>> Looking for web consulting? Or a new website?
>> Send me an email and we can get started.
>> www.isiahmeadows.com
>>
>>
>> On Thu, Nov 2, 2017 at 4:32 PM, doodad-js Admin <doodadjs at gmail.com>
>> wrote:
>> >
>> > -----Original Message-----
>> > From: Claude Petit [mailto:petc at webmail.us]
>> > Sent: Thursday, November 02, 2017 4:24 PM
>> > To: 'kai zhu' <kaizhu256 at gmail.com>; 'es-discuss' <
>> es-discuss at mozilla.org>
>> > Subject: RE: javascript vision thing
>> >
>> > For mostly real OOP under JS, please see my project (doodad-js). But I
>> can't warranty its future without a custom language because nobody on
>> TC39
>> want to works along-side with me on that project, and they are making
>> their
>> own supposed "classes" which are not.
>> >
>> > -----Original Message-----
>> > From: kai zhu [mailto:kaizhu256 at gmail.com]
>> > Sent: Wednesday, November 01, 2017 11:43 PM
>> > To: es-discuss <es-discuss at mozilla.org>
>> > Subject: javascript vision thing
>> >
>> > any thoughts? i'll break the ice with a quora question i recently
>> answered
>> >
>> > quora question:
>> >> Why is JavaScript so hated?
>> >
>> > answer posted:
>> >>the primary reason is because traditional oop skills gained from
>> c#/c++/java/python/etc translate poorly to javascript.
>> >>
>> >>in javascript, class-instantiated objects are inferior to
>> >> plain-objects,
>> because plain-objects come with JSON.stringify/JSON.parse baked-in, while
>> classes require needless extra serialization/deserialization routines
>> which
>> can easily double your codebase or more (as real-world javascript-code is
>> heavily i/o based). i would say many people burn-out from
>> frontend-programming because they can’t cope with debugging all the i/o
>> edge-cases serializing/deserializing their custom classes.
>> >>
>> >>javascript and frontend-programming is essentially about efficiently
>> managing the program-state like a baton, constantly passing it
>> back-and-forth between the browser’s ui and various backend-servers /
>> persistent-storage. plain json-objects utilizing idiot-proof
>> JSON.stringify/JSON.parse, are naturally better at this baton-passing
>> business than writing classes with custom serializers.
>> >
>> >
>> >
>> > there's currently a civil war going on in frontend-development, between
>> those who don't want to deal with writing extra class-based
>> serializers/deserializers and those who do.  these 2 different design
>> patterns have incompatible styleguides that often break web-projects when
>> people try to mix-and-match both together.  i don't have a simple
>> solution
>> to this issue, but tc39 should be made aware of it as they try to
>> formulate
>> a javascript vision that doesn't alienate frontend-development.
>> >
>> > -kai
>> >
>> >
>> >
>> > ---
>> > This email has been checked for viruses by AVG.
>> > http://www.avg.com
>> >
>> > _______________________________________________
>> > es-discuss mailing list
>> > es-discuss at mozilla.org
>> > https://mail.mozilla.org/listinfo/es-discuss
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>


More information about the es-discuss mailing list