* specified structure layout (e.g. bitfields)
* memory layout awareness (e.g. alignment & packing)
* memory ordering awareness (e.g. memory fencing)
* integration with processor intrinsics (e.g. SIMD)
Don't show me a "Hello, world!" example; show me a highly optimized lock-free single-writer single-reader queue. Show me code to decode/encode network protocols. Show me how to access MMIO.
As an embedded developer, I find C simultaneously not high-level enough and not low-level enough. What I would want to see in a language replacing C is at least:
* decoupling of data types from storage size from modular arithmetic (still allowing all to be specified)
* decoupling of logical structure layout from physical structure layout (allowing both to be specified)
* decoupling of on-the-wire layout from in-memory layout
* more expressive memory ordering/visibility constraints
* hygienic generics (Myrddin gets points for this, C++ does not)
* a proper module system (like OCaml's)
* more expressive means of hinting optimizations (such as when to make stack frames, spill registers, unroll loops, etc.)
That is, a new language needs to expand in both directions – higher- and lower-level – to replace C for "close to the metal" work. Just higher-level, like Myrddin and kin (OCaml, Rust, etc.), won't cut it.