4 ms·
For one, respected community member pcwalton has argued against compiling to C, citing the difficulty in producing performant, memory-safe output. For another,
by moosingin3space 6y ago
For one, respected community member pcwalton has argued against compiling to C, citing the difficulty in producing performant, memory-safe output.
For another, from personal experience, I can comment that compiling to C in such a way that doesn't leak abstractions left and right is quite challenging. It's pretty hard to produce memory-safe C, so it's a ton of work, and the payoff is pretty marginal, as the most important platforms already are supported by LLVM.
- CyberRabbi 6y agoAutomatically generating “memory safe” C is no harder than automatically generating “memory safe” LLVM bitcode.
- brundolf 6y agoI think the issue is all of C's undefined behavior
- ghoward 6y agoFor the most part, that can be worked around as well, with careful use of unsigned arithmetic. See https://git.yzena.com/Yzena/Yc/src/branch/master/include/yc/arith.h https://git.yzena.com/Yzena/Yc/src/branch/master/include/yc/... for some examples. All arithmetic is unsigned, but I use it to simulate 2's complement signed.
- CyberRabbi 6y agoThat is not difficult to avoid if you are generating short primitives. You can for the most part just convert the LLVM bitcode that the Rust compiler would output to the equivalent C snippet. Since each snippet is short, you can trivially check if it invokes undefined behavior. LLVM bitcode also can exhibit undefined behavior.
- moosingin3space 6y ago> You can for the most part just convert the LLVM bitcode that the Rust compiler would output to the equivalent C snippet. Sounds like a good argument to resurrect the LLVM C backend. As it stands, the Rust core team has no desire to implement a C backend, as it would be a ton of work for not much gain.