Which is sad, because all code is still executed as machine instructions even when the developer does not see it or does not want to care.
Which is sad, because all code is still executed as machine instructions even when the developer does not see it or does not want to care.
But some people, yeah, they could do it.
That has not changed.
Certainly one can bang out code their entire career without ever having a clue how machine code works, but I really wouldn't advise it. At worst it leads to total ignorance, and at best you accumulate a disconnected set of "best practices" as inscrutable lore handed down from on high.
But it probably ran in like 100us anyway
Anyway, complexity stays relevant, no matter what language you use. That's the real deal.
it's not useful to know how the browser allocates memory or garbage collects it, it's more useful to know that it has web sockets. Don't get the idea that things you know are relevant to other people.
Abstractions are good, and while we should be careful not to completely trust a brand new abstraction, high level languages are established enough that we don't need to worry about it.
The code the programmer wrote is compiled to something such as LLVM IR, LLVM IR is further compiled by LLVM to Assembly, this is further compiled by an assembler into machine code, and then the c.p.u. further compiles this to it's internal code as it executes it. “machine code” really is no more special in this chain of events than, say, LLVM IR.
I think this is the core point. Even though you are mechanically feeding machine code into the CPU, modern CPUs deeply transform your program before (or even while) running it, with potentially deep performance implications. With modern CPUs, the only choice we truly have is which compiler we trust to optimize our program.
x86 has a developers manual for this purpose.
We are way beyond MS-DOS days and Michael Abrash's books.
Why is the c.p.u. special?