5 ms·
As someone interested in language design, what design decisions, in your opinion, make JS so terrible? The extremely weak type system?
by Meegul 10y ago
As someone interested in language design, what design decisions, in your opinion, make JS so terrible? The extremely weak type system?
- bluejekyll 10y agoFor me the extremely weak type system is one thing. In general the language is too accepting of bad code. It's kinda like HTML, "if you can guess at what it's supposed to do, do it." Personally, I prefer stricter interpretation over weaker versions. Another big one for me is "this", which has significantly different semantics than nearly any other OO language out there. I personally find it confusing, and it requires you in many cases to understand the invocation point of a function. I can not reason about all the data related to the scope of the function, in the function, without first taking into consideration all the callers of the function. To be fair though, JS is not the only language that features these flaws. The biggest problem with it is that I'm not really given a choice to use other languages. Yes, there are transpilers, but even with those I almost always need to use JS at some point for integration with other code.
- loppers92 10y ago- Bad Performance - Extremely weak type system - No generic language - Too many abstractions - Double behavior of types - Bad scaling - Extremely bad OOP Implementation (Just 1% of OOP) - the Debugging approach doesn't make any sense - The Community (1000+ Frameworks with almost the same features for what existing standards?????)
- allover 10y ago> - Bad Performance It's one of the fastest dynamic languages in existence, considerably faster than e.g. Ruby and Python > - Extremely weak type system Compared to what? It's a dynamic language. > - No generic language - Too many abstractions - Double behavior of types - Bad scaling - Vague, what does these even mean? Compared to what? > Extremely bad OOP Implementation (Just 1% of OOP) Again vague, what is it lacking? Perhaps it just implements the bits people actually use? > the Debugging approach doesn't make any sense No idea what this means. Chrome devtools debugger is excellent. > The Community (1000+ Frameworks with almost the same features for what existing standards?????) It's a huge community, there're bound to be lots of camps and lots of people trying to crack the same nut different ways. What's wrong with competition? I personally think it's a fantastic community, and find others lacking by comparison.
- chc 10y ago> It's one of the fastest dynamic languages in existence, considerably faster than e.g. Ruby and Python I think this is kind of a question of what it means for a language to be fast. The big browser companies have poured a mind-blowing amount of resources into making their JavaScript engines fast. This has made these JavaScript engines faster than other implementations of slow languages that have not had similar resources devoted to performance. But this does not mean "JavaScript is fast" in the sense that the design of JavaScript readily enables good performance, and it doesn't make JavaScript fast relative to actually fast languages. > Compared to what? It's a dynamic language. JavaScript's type system is extraordinarily weak even compared to most popular dynamic languages. For example: $ python -c "print(1 + '1')" Traceback (most recent call last): File "<string>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' $ ruby -e "puts(1 + '1')" -e:1:in `+': String can't be coerced into Fixnum (TypeError) from -e:1:in `<main>' $ node -e "console.log(1 + '1')" 11
- allover 10y ago> I think this is kind of a question of what it means for a language to be fast [...] It's significantly faster than most other dynamic languages. It's fast as a compilation target to the extent we can run Unreal Engine in the browser. So I consider the original comment I replied to that simply stated 'Bad performance' incorrect or at least lazy/contextless criticism. If you want to reframe, fine, but I'm not going there :) Accidental string coercion is a valid point. Also hasn't bitten me in ~10 years of building large JS apps. And JS has many advantages over e.g. Python these days that to me vastly overshadow that downside (better support for FP for one). (And if you really want that type safety you can use TypeScript, just another great thing to come out of the JS community, you know the one that GPP criticised for daring to provide choice).
- chc 10y ago> It's significantly faster than most other dynamic languages. It's fast as a compilation target to the extent we can run Unreal Engine in the browser. So I consider the original comment I replied to that simply stated 'Bad performance' incorrect or at least lazy/contextless criticism. The entire point of my comment is that the statement "JavaScript is faster than other dynamic languages" is lazy/contextless praise. V8 is fast. Rhino is slow. JScript 5 is really slow. They are all JavaScript. V8 is fast because people really wanted it to be fast and did some impressive cutting-edge work to make it happen, not because the language lends itself well to speed. It is a credit to the skill of the people working on the JavaScript engines that JavaScript programmers nowadays can enjoy decent speed, and AFAIK it's not particularly attributable to any specific features of the language.
- galacticpony 10y agoI believe the flaws are well-documented and there isn't much dispute over them, though not all of them are real problems. I also don't think it's the lack of language features that makes it bad. This is something that is getting addressed. What really does cause problems is the basic types, the type "system" and the way numbers are treated/represented.