Most of the stuff went over my head, Why should I care that C is no longer low-level? What exactly is considered close-to-metal in today’s time, apart from binary and assembly?

  • smpl
    link
    English
    62 months ago

    The C compiler or third party libraries can provide support for parallel execution and SIMD. That article is just used by people in an attempt to argue that C’s strength in being a good low level abstraction is false, which it isn’t. C is the best portable abstraction over a generic CPU that I know of. If you start adding parallel features and SIMD like the article suggest, you’ll end up with something that’s not a portable low level abstraction. To be portable those featues would have to be implemented in slow fake variants for platforms that doesn’t support it. We can always argue where to draw the line, but I think C nailed it pretty good on what to include in the language and what to leave up to extensions and libaries.

    C is not a perfect abstraction, because it is portable. Non portable features for specific architectures are accessed through libraries or compiler extensions and many compilers even include memory safe features. It’s a big advantage though to know Assembly for your target platform when developing in C, such that you become aware fx. that x86 actually detects integer overflow and sets an overflow flag, even though that’s not directly accessible from C. Compilers often implement extensions for such features, but you can yourself extend C with small functions for architecture specific features using Assembly.