3 ms·
Automatically generating “memory safe” C is no harder than automatically generating “memory safe” LLVM bitcode.
by CyberRabbi 6y ago
Automatically 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.