Comment by phicoh
2 years ago
There is the classic case of the Linux kernel dereferencing a null point and then check if it is null. Then the compiler removed the null pointer check because dereferencing a pointer means that it cannot be null without invoking undefined behavior.
This is just horrible. C started out as portable assembler. Now essential instructions get deleted. The C standard is a horrible way to define a low-level programming language. Obviously, C is a sharp object. But standard C is a sharp object that jumps at you.
I had a lot of fun writing C. The same way you can have fun writing assembler or do other level stuff. Compared to low-level kernel stuff, C is not a big problem.
I'm talking radically different architectures. Virtual memory has a high cost in the implementation of a CPU. There could be other architectures, capability based, segment based, etc. But if your CPU has to run C efficiently, then you probably don't want to go there.
There is a lot of cruft, like ASLR, that only exists because memory is a flat array of bytes.
As long as the primary goal of a CPU is to run C efficiently, we won't get beyond paged virtual memory.
No comments yet
Contribute on Hacker News ↗