Very interesting article at the IEEE ACM by David Chisnall.
In the wake of the recent Meltdown and Spectre vulnerabilities, it's worth spending some time looking at root causes. Both of these vulnerabilities involved processors speculatively executing instructions past some kind of access check and allowing the attacker to observe the results via a side channel. The features that led to these vulnerabilities, along with several others, were added to let C programmers continue to believe they were programming in a low-level language, when this hasn't been the case for decades.
(Score: 1, Insightful) by Anonymous Coward on Wednesday May 23 2018, @08:21PM (1 child)
Seems to be splitting hairs over "high" or "low" here. It's somewhere in between.
It started off as portable assembler. Sort of high-level but geared toward low-level operation.
It has since been used for generalized applications in place of other high-level languages. Often C becomes the choice because many other high-level languages abstract away enough that sometimes programmers will run in to something they can't do within that language, but in C almost anything is possible.
So it is sort of a mid-level programming language really. Used mostly for high level stuff, but still stinks to hell of low level crap.
(Score: 2) by HiThere on Wednesday May 23 2018, @08:53PM
Well, I never programmed on the PDP, but to me C seems close to assembler level on an appropriate architecture. I do recall that Lifeboat C for the i8088 didn't implement the full language because it would take too much RAM, and they did a lot of the instructions with assembler macros. That's pretty low level.
And how would you rate fig-forth? At least the first version I encountered was implemented via a bootstrap module implemented in assembler, and even the later modules could easily incorporate assembler code. I don't know if that's still true, it doesn't look as if they publish a version for a modern processor. That's what tends to happen when your code is tied to assembler.
Javascript is what you use to allow unknown third parties to run software you have no idea about on your computer.