Except that C isn't really the truth - Assembly is the truth. You can easily write code that is a huge abstraction from what the CPU is actually doing - for example, writing `float y = 1.5 * x` on a processor without a hardware FPU will generate a ton of instructions that one wouldn't normally think of.
Now, the abstraction layer that C provides is valuable, and C is indeed much more practical than assembly for most purposes, if only due to portability - but if the only reason for using C is to gain an understanding of the inner workings of the computer, without regard to portability or reuse of code, assembly serves that purpose even better.
Not even assembly is truth. In modern CPU architectures, your machine instructions are getting scheduled and parallelized in all sorts of weird ways that makes it hard to reason about the performance of your code. The instruction set architecture that assembler language maps to is an abstraction running on top of the microcode architecture. Perhaps microcode is truth, but nobody really wants to program at that level.
C is close enough to the truth that you can use it write an operating system that controls the CPU and its attached devices.
Now, the abstraction layer that C provides is valuable, and C is indeed much more practical than assembly for most purposes, if only due to portability - but if the only reason for using C is to gain an understanding of the inner workings of the computer, without regard to portability or reuse of code, assembly serves that purpose even better.
reply