6 ms·
>it's just not a terribly good or fast one From everything I've seen, its performance sits just below Java (4x slower, perhaps) on some standard algorithms or
by nawgszy 8y ago
>it's just not a terribly good or fast one
From everything I've seen, its performance sits just below Java (4x slower, perhaps) on some standard algorithms or tasks, and significantly faster than languages like Ruby, Python, etc.. I never see hate for those languages like for JS, so I'll disregard that.
>not terribly good
This one never has made sense. What is it missing that makes you hate it so? I think it has rather robust asynchronous handling, 'everything is an object' has lots of nice implications when paired with functionality like Object.keys / .assign, ... So what are the issues you see that make it 'bad'?
- arghwhat 8y ago> (4x slower, perhaps) "4x" is a lot slower, and a lot of things are much worse than this. You have to have deep knowledge of the VM (such as knowing how "hidden classes" work in V8) to be able to get JS close to Java. > so I'll disregard that. You shouldn't. Claiming a JIT'ed language is fast due to being faster than Python, an entirely interpreted language, is like saying a moped is a fast vehicle because it's faster than biking. Apples and oranges. Being faster than PyPy, the JIT'ed Python implementation, is a more interesting thing, but this is still very far off "fast" languages. > What is it missing that makes you hate it so? Most language features, really. "Everything is an object and objects are hashmaps, EVEN ARRAYS" (terrible for performance, type safety), "array of int16" strings with totally broken unicode codepoint handling (ES2016 brought new ways to deal with codepoints, but the standard way is still broken), the "Number" type which is totally retarted, the terrible "prototype" system, the malice that is "this" and how any bare function expression had its own this context (arrow functions are a good workaround now), and god I could go on. "Everything is an object" is only useful if you either actually need a hashmap (then use one!), or you have sloppy types. JS, as a langauge, is not well designed. I'm not saying it had to be Haskell or Rust, but JS is far below average. It works, and does it job decently due to the very hard work of JS engine implementors trying to make this crazy thing fast, but that's not the same as being good.
- bitL 8y ago> objects are hashmaps But you still have to compute hashcode yourself :D
- xamuel 8y ago>Most language features, really. Name a few. >terrible "prototype" system >malice that is "this" It sounds like you are talking about ES5, not ES6+
- bitL 8y agoCan you guarantee all ES6- code to disappear immediately? Or are you forced to dive deep into warts when you have to work on some older JS project?
- jhall1468 8y agoWow, now we're complaining about the outdated versions of a language? Come on man. Nobody is going to write a modern application in ES5 and there are plenty of warts in old Java, C and Python applications as well. That's the nature of them being "old".
- shawnz 8y agoWhy does that impact whether or not it's a reasonable choice to use the language today? Old libraries I could understand, but old independent projects? How do they affect the current state of the language?
- bitL 8y agoIsn't it obvious? You apply for a job, company that isn't a startup has code that is likely written with old JavaScript whose replacement is not economical, so even if you do everything new in ES7, you still have to wade through old ugly code, likely everyday.
- StavrosK 8y ago> Name a few. He did, literally exactly after that sentence.
- xamuel 8y agoNo, he listed some things that he thinks are broken, he didn't list missing language features
- jhall1468 8y ago> 4x" is a lot slower, and a lot of things are much worse than this. You have to have deep knowledge of the VM (such as knowing how "hidden classes" work in V8) to be able to get JS close to Java. That's a solid argument for only programming in C and Assembly because they are often 4x faster than anything. > Most language features, really. AKA, your preferences are "language features". > Everything is an object So you don't like Python. Or Ruby. > the "Number" type which is totally retarted Very technical argument there. > the terrible "prototype" system So you prefer classical inheritance. Cool. Doesn't mean prototypal inheritance is a bad thing. None of what you mentioned are missing features, they are personal preferences stemming for your own language preference that differs dramatically from Javascript. I'd start by disassociating your opinionated stances from actual weaknesses in the language, of which there are many, and none of them are what you mentioned.
- FridgeSeal 8y agoIf I threw billions of dollars of vested interest at Python/Ruby/COBOL/(insert language of your choice) we can probably make those run at JS speeds as well. Does that solve the fundamental drawbacks of the languages? Nope. No it does not. JavaScript is particularly egregious because of it's weird behaviour about types and coercion and you know, just silently failing, behaviour that I wouldn't want going on in any proper system that handles anything important. Other people have written at great length about JS's many failings. JS is not the only language with nice async support, practically every mature language has async support and a good number of the compiled ones have proper parallel support as well.
- workinthehead 8y agoevery dynamically-typed language has "weird" behaviour around type coercion, that's simply the nature of the beast. sure wish i knew what you are talking about w/r/t "silently failing". JS has working exceptions just like 99% of widely used languages. I'm very glad that you've been omniscient enough to determine what "proper" parallel support is, though. How's that working out for you? Meanwhile, those of us using JavaScript simply run one process per core and never worry about contention, deadlocks, or race conditions.
- tom_ 8y agoProbably this thing, easy to spot in isolation but much harder when part of a larger system: > x={} > x.fred undefined Actively unhelpful!
- pdpi 8y ago> every dynamically-typed language has "weird" behaviour around type coercion Do they now? $ irb irb(main):001:0> "0" + 1 TypeError: no implicit conversion of Fixnum into String from (irb):1:in `+' from (irb):1 from /usr/bin/irb:11:in `<main>' irb(main):002:0> ^D $ python >>> "0" + 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects >>> ^D $ node > "0" + 1 '01' > Meanwhile, those of us using JavaScript simply run one process per core and never worry about contention, deadlocks, or race conditions. If you never worry about those things, then you're either not sharing any resources at all (in which case threads are also dead easy), or you're failing to deal with the shared resources properly.
- thomascgalvin 8y ago> What is it missing that makes you hate it so? 1. Type Safety. TypeScript helps, but until strong typing is mandatory in the language, I can't fathom using JS in any sizable project. This is also true of Python, et al. 2. A sane dependency management framework. Maven solved this problem a decade ago. Gradle is trying to fix Maven's XML mistake. But the fact is, if I need a dependency in Java, I know how to get it. And as a bonus, Maven Central isn't going to go down next Tuesday because Timmy in Alberta threw a temper tantrum or something. 3. A sense of stability. Javascript's framework churn is just exhausting.
- snorremd 8y ago2. After the npmjs.com registry became immutable and npm got lockfiles I feel npm is pretty much there as far as dependency management systems go. I'm not sure if npm shares the cache across projects (like the ~/.m2/repositories folder for maven/gradle/leiningen), but you can get that with the yarn client if saving disk space is important.
- jhall1468 8y ago> until strong typing is mandatory in the language, I can't fathom using JS in any sizable project. There are massive JS projects in production today, but that's moot. It's never going to be mandatory because that ruins the point. Typing isn't a requirement of a language. > A sane dependency management framework. Maven solved this problem a decade ago. A Rube Goldberg machine that solved a problem? Maven's goals may have solved the problem, but its implementation did not. > A sense of stability. Javascript's framework churn is just exhausting. Feature, not a bug.
- jmull 8y ago> ...until strong typing is mandatory in the language, I can't fathom using JS in any sizable project. There are quite a large number of counter-examples to show type safety isn't especially important to the success of large projects. I think the guarantees it provides are far too limited and weak to support large software systems. It relies on static code analysis, which doesn't mean much unless your app is a single build and runs as a single instance. That's more of a '90's style Microsoft Word type of app than what a typical large software project is today. Meanwhile the guarantees it does provide are only helpful to the extent developers can map their domain problems to the capabilities of the type system. Sometimes there is a nice natural fit, but usually the typesystem is both too weak (doesn't provide a convenient and natural way to impose the constraits of your problem domain) and too strong (imposes constraints your don't need or want, encumbering your development process). Not to mention that when it comes to Javascript, you can opt-in to about as much static code analysis, including type-safety, as you want.
- cm2187 8y agoWhat creates hostility is the sentiment of being forced to use a bad language. There are many alternatives to python or php but none really to javascript (transpilers hacks apart). Webassembly might change that. The only other language that I have seen generating as much hostility is vb6, and also I believe because some developpers found themselves forced to use it.
- paulie_a 8y agoAlso VB 6 syntax was complete shit.
- cm2187 8y agoPretty much any old language has an odd and inconsistent syntax. I am getting into python now and it feels so much like doing VBA.
- bitL 8y agoOh yeah, just wait until during a job interview somebody complains that you aren't "pythonic" enough, i.e. don't use some weird inconsistent syntactic wart somebody learned to love.
- throwaway13456 8y agoHave you ever used a language like Elixir? After using Elixir, my first thought was "why the f would anyone even use JS in 2018?" That's how poor the design choices of JavaScript are. Not to mention that the name itself is trademarked by the biggest troll (Oracle corporation). After using something like Elixir, you'll even wish if Javascript could be permanently banned from the Software industry for ever. I use Elixir + Ruby + Coffeescript and I still wish JS was never invented. https://twitter.com/bendhalpern/status/578925947245633536?lang=en https://twitter.com/bendhalpern/status/578925947245633536?la...
- bitL 8y agoThat tweet was golden!
- always_good 8y agoHonestly your post just reeks of amateurism. I used to think the same thing back when I used Clojure + ClojureScript. Hah, what idiot would choose Javascript over my god tier Clojure/Script setup? Well, one day I actually tried to build a company and my cofounder just couldn't be fucked to learn Clojure. We decided on Node. I was forced to learn how to play nice with Javascript where I learned how to appreciate it. Nowadays, I have a hard time justifying something like Clojure/Script over Javascript. Same with Elixir. And I am very wary of people who can't spot trade-offs since that was how I used to be, and I was wrong. I just didn't have enough experience. There is no best. There are only trade-offs. Elixir/Clojure might be a good business decision for your project, but if you can't concede any positives to Javascript, I don't think you have a firm grip. And in the end it's always a business decision, not a technical one.