10 ms·
Nowadays JS is as fast as C++, if not faster.
by npigrounet 5y ago
Nowadays JS is as fast as C++, if not faster.
- goldenkey 5y agoLet me respond for him. He meant abstraction as in "stack of dependencies." Because everyone knows that's what abstraction means, right?! Because we all know NPM is a disaster as opposed to C++ dependency management which doesn't even exist in a standard form. /s
- Jensson 5y agoMicrosoft has a C++ API you use to make programs for windows. If you write in C++ you will code directly against that. If you write in Javascript then you will code against someone else's API that they wrote to interface with the Microsoft API. If you write in Javascript another step up then you will code your plugin against the VSCode API which then uses the Electrons wrapper around Microsofts API to do stuff, if there aren't more libraries in between. This stack of abstractions turned out to be too slow to solve the problem mentioned in the article we are talking about, so to solve it they moved the entire thing up one step in the stack. In these situations it is common to have a problem that is really easy to solve but the API abstractions you have to work with doesn't support the operations at the speeds you need to solve it. If you have never experienced that then you aren't working on performance intensive projects where every bit counts and your input on this topic doesn't matter. I have worked on performance intensive libraries crossing programming language boundaries and the abstraction boundaries absolutely puts a limit on the amount of performance you can get. Well designed abstractions are less obstructive but plenty of them aren't well designed and even the well designed ones have overhead.
- npigrounet 5y agoJS is almost close to the metal nowadays thanks to the stunningly optimized JIT.
- amw-zero 5y agoCan you initialize a kernel with JS?
- goldenkey 5y agoOf course. Have you not seen the VMs written in JS? https://bellard.org/jslinux/ https://bellard.org/jslinux/
- amw-zero 5y agoThat is a VM running in a web browser. If I was thinking about a joke that was so comically far away from the metal, that’s pretty much what I would use as an example. This is why it’s very difficult to have conversations. Most programmers really don’t even know how computers work.
- goldenkey 5y agoHeh, I know plenty about how computers work. You didn't specify what hardware you wanted targeted. Emulated devices are just abstractions. Here is a real kernel: https://news.ycombinator.com/item?id=7958194 https://news.ycombinator.com/item?id=7958194 It's so difficult to have conversations with engineers that don't know x86 assembly. They never stop complaining. If only I could NOP them! ;-)
- goldenkey 5y agoAh, so this is all coming from a Microsoft C++ guy. Well better get to using those undocumented ntdll calls since you really need those uOps. It's not like the standard libraries of other languages is written in C or anything... ;-)
- WorldMaker 5y agoMicrosoft has a COM API. C++ has a stack of macros and abstractions for communicating with a COM API. If you code in C++ you code in abstraction to an interface to the Microsoft API but not the API. To get rid of abstractions you almost should be writing more directly in some sort of COM+ language. (To explain the punchline for those that don't catch the joke: COM+ was the codename/early name of what became .NET.)
- goldenkey 5y agoMicrosoft has a COM API but when I used to develop, I'd just call kernel32, user32, advapi32, and other system C APIs directly. COM is a POS imo. DirectX is a decently engineered class-based API. But the rest of them have a lot of flaws. The funny part is OP is talking all about uOPS when if he was really hardcore (like I am) he'd know that these dlls in turn call ntdll, many calls in ntdll are undocumented but much faster than their wrappers in the other dlls. But no sane person is going to strictly do ntdll calls except for the most performance critical code. OP just doesn't know enough about C and C++, he probably grew up on C++ and forgot about the old C apis. I used to reverse engineer and delve deep into the windows API. I know a little bit more about performance than the average high level programmer. And ultimately, .NET does a fine job with performance. C++ coders crapping all over .NET should take a look at the Objective C API of Apple. It's the default and every Objective C call incurs overhead and is basically a wrapper around the undocumented C API. But I don't think anyone ever complained about this abstraction, because it's such a stupid and small amount of performance to harp about. The convenience outweighs the tiny little uOPS loss.