News for hackers. Stuff that matters.
Re:C Is Not a Low-level Language (2018) by vlovich123 on Tuesday December 28, 2021 @09:54AM (#29714315)
You say “ This is not the definition used in the article. There is literally a paragraph called "what is a low level language" at the beginning:”

Then say C fails this test of being low-level:

> A modern Intel processor has up to 180 instructions in flight at a time (in stark contrast to a sequential C abstract machine [..]) > [..] the C abstract machine's memory model: flat memory. This hasn't been true for more than two decades. > Unfortunately, simple translation providing fast code is not true for C.

None of this is true for assembly either. To my knowledge neither x86 nor ARM expose primitives to control runtime instruction parallelism nor cache. You just have to know what that looks like and how to adjust that implicitly as best you can (still with no guarantees). Maybe a CPU architecture like Vulkan would work where there’s low-level primitives and vendor-specific plugins but I don’t know. GPU programming has gotten significantly harder and error-prone with Vulkan. Additionally, game-programming doesn’t need pixel-perfect behavior while you do typically want that out of your CPU (yes it’s slightly inaccurate with GPU compute advancements, but that’s still significantly more expensive as a development target and reserved for problems where the value is worth it)

Re:C Is Not a Low-level Language (2018) by lapinot on Tuesday December 28, 2021 @10:09AM (#29714444)
You'll find that you are indeed correct and that it is the point of the article that neither C nor assembly are compelling low level programing languages.
Re:C Is Not a Low-level Language (2018) by AnimalMuppet on Tuesday December 28, 2021 @12:46PM (#29716028)
But by that definition, programming in binary isn't low level either! If by the definition, there is no low level programming possible, then it's not a very useful definition.

(I mean, the point that "it's higher level than you think" might be a reasonable one to make. But arguing about the definition of "low level" may not be the best way to make that point.)

Re:C Is Not a Low-level Language (2018) by kaba0 on Tuesday December 28, 2021 @03:05PM (#29717442)
I agree with your take, but I still find the article really informative regarding the relative high-levelness of x86 instructions and as someone else wrote: “while js, java, etc. developers learned that the programming model used by the language is quite distinct from the CPU’s one, C programmers like to live in their fantasy land where they just have a very fast PDP-11” (I may have combined a few sentences from the thread, but the point is the same)

By the way: what’s your take on VLIW architectures? Possibly with the currently hardware level optimizations moved to software?

Re:C Is Not a Low-level Language (2018) by AnimalMuppet on Tuesday December 28, 2021 @05:19PM (#29718972)
So I think we could say that 1) C is low level, and 2) the distance between C and what's really going on is much larger than it used to be, partly because the distance between assembly opcodes and what's really going on is much larger than it used to be.

Re VLIW architectures: I don't know enough to have a take about them specifically. But I fear moving the optimizations from hardware to software, because it's going to be really hard to optimize as well as Intel/AMD/Arm do, and it's going to be really easy to mess something up. (I don't write assembly if I can help it - I let the compiler writer do it. I don't manage memory if I don't need to. And so on.)

I can see some people might benefit from this, but I suspect that it's bleeding-edge people only. Most of us won't gain from going this route.

Note well: Just my take. Your mileage may vary.

Re:C Is Not a Low-level Language (2018) by astrange on Tuesday December 28, 2021 @01:56PM (#29716701)
They do expose cache control operations, but they’re rarely useful. If you get a lot of cache misses then you can add prefetches but this is very sensitive to what processor you’re on so it’s not always worth it.

And of course if you’re writing EFI code sometimes you haven’t turned the RAM on yet and cache is what you’re executing out of.