Earlier quoted context omitted.
Thank you. I sure tried C too (also C++ for gui programming), though I wouldn't say I "know" it (which to me would imply at the very least one significant real-world experience with it), I do understand why some projects try to modernize "system" programming. I just want to evaluate alternatives, but I may very well go for C in the end...
C is portable assembly, I’d recommend learning it together with the assembly for the platform you’re learning on, so you can actually understand the stack, heap, calling conventions, etc.
- no access to carry/overflow flag in registers making it a chore to write bigint libraries
- no way to guarantee emitting add with carry or sub with borrow even though those are simple instructions and some architecture (6502) don't even provide a normal add/sub
- need to drop down to assembly to implement resumable function/fibers to avoid the syscall costs of ucontext/setjmp/longjmp
- no access to hardware counters like RDTSC
- no way to get the CPU frequency in a portable and reliable way
- no portable threadID function and then, those that are available (pthread_self, and Windows') rely on expensive syscalls.
- no way to do CPU feature detection (SSE, AVX, ARM Neon, ...)
- no way to control emission of common intrinsics like popcount, bit-scan-reverse, lowest bit isolation in a portable way.
The portable assembly narrative breaks down rapidly when you actually need specific code to be emitted.