3 ms·
> Maybe I'm just so used to the quirks that I don't see them as a problem any more. To jog your memory, here's a list of questionable design decisions I can th
by cygx 14y ago
> Maybe I'm just so used to the quirks that I don't see them as a problem any more.
To jog your memory, here's a list of questionable design decisions I can think of off the top of my head:
Automatic semicolon insertion and a broken == operator
A language shouldn't try to guess the programmer's intention, but rather fail cleanly on ambiguous cases.
Function scope and global by default
Frankly, I'm appalled by how many dynamic languages get it wrong. Lexical block scoping with mandatory declarations are by far the most sane approach I've come accross, and the only P-language (Perl, Python, PHP with Ruby and Javascript as honorary members) that gets it right is (strict-mode) Perl.
Weird object system
While actually protypal, the constructor-with-prototype-property semantics add a pseudo-class based overlay without an obvious mechanism for object extension and code reuse.
- jeswin 14y ago- Add semicolons, if that's what you prefer. - If you needed type checking, use ===. - Function scope and object system, what's wrong with it? These things don't matter in practice, although we could go on arguing about them. If a language has basic hygiene like first class functions I can build apps with it.
- cygx 14y ago- Add semicolons, if that's what you prefer I do, but others disagree. My point is that when parsing fails, insert a semicolon and try again doesn't look very appealing from my personal criteria of language design. - If you needed type checking, use === Which was added to the language after it was realized that the original semantics of == might not have been that well thought out. - Function scope and object system, what's wrong with it? Block scoping provides a finer level of encapsulation than function scope. Do you think `let` was added to the language (JS1.7, ECMA6) just for the heck of it? As for the object system: Instead of using one of the well-known approaches (protoypal with cloning or class-based with inheritance), JS comes with a weird hybrid system inferior to both. Of course JS allows both approaches, but does not provide syntactic support for either, which makes them clumsy to use and open to fragmentation.
- w0utert 14y agoIt's very easy to brush all of these as "don't matter in practice" or "just use <insert sane equivalent of ...>", but if we go that route, almost any language can be considers 'good enough' to write code in. I see 2 problems with this point of view: 1) Ever programmer sometimes makes mistakes, such as forgetting a semicolon, or writing '==' instead of '===' 2) This assumes that anyone writing JavaScript knows about all these gotcha's We can sit here all day arguing about 'how bad' some of the things JavaScript does or does not, but that's not the point. Most other languages have none of these issues, and if tomorrow somehow all browsers on earth would magically be able to run some kind of clean alternative to JavaScript, I'm pretty sure everyone would immediately jump on it.