3 ms·
>Here's something I'd love to know about undefined behavior in C: is this something specific to C, or is it something that any similar language would have to co
by xrange 9y ago
>Here's something I'd love to know about undefined behavior in C: is this something specific to C, or is it something that any similar language would have to contend with?
How similar is similar? Pascal? Ada? Spark Ada? Rust? Friendly C (https://blog.regehr.org/archives/1180 https://blog.regehr.org/archives/1180)?
- iainmerrick 9y agoYes, I'd say those are similar. Systems languages, no mandatory GC. That Friendly C proposal is terrific, I'd dearly love to use that. Basically, use sane and conservative optimizations for most code, with the option of using aggressive optimizations for hotspots. Kind of similar to Rust -- mostly safe by default, more dangerous stuff available when you need it.
- raphlinus 9y agoThe Friendly C idea seems to be basically dead. For an update of what Regehr is pursuing now, see https://blog.regehr.org/archives/1520 https://blog.regehr.org/archives/1520 (Undefined Behavior in 2017).
- masklinn 9y agoIIRC Safe Rust has no UB, `unsafe` does, according to the Nomicon: * Dereferencing null or dangling pointers * Reading uninitialized memory * Breaking the pointer aliasing rules * Producing invalid primitive values: - dangling/null references - a bool that isn't 0 or 1 - an undefined enum discriminant - a char outside the ranges [0x0, 0xD7FF] and [0xE000, 0x10FFFF] - A non-utf8 str * Unwinding into another language * Causing a data race These are all guarantees unsafe code must uphold or there are no guarantees anymore. IIRC LLVM IR also has UBs.
- iainmerrick 9y agoI wonder if it's possible to sneak UB into normal "safe" Rust code, by leveraging LLVM optimizations?
- bbatha 9y agoIts totally possible, but its considered a compiler bug if it does happen. In the same way that its possible to segfault java if there's a bug in the jit. There's an on going project to verify the semantics of the Rust language and its safe abstractions[0] which should make it easier to choose which optimizations are legal. 0: http://plv.mpi-sws.org/rustbelt/ http://plv.mpi-sws.org/rustbelt/
- Manishearth 9y agoAssuming no compiler bugs, no. UB isn't something "caused" by optimizations, it's something that exists in the code before optimizations, optimizations can just trigger nasal demons. So you shouldn't be able to write UB in safe Rust assuming no compiler bugs. (And assuming that any unsafe libraries being leveraged are bug free)
- kibwen 9y agoYes, though those are considered bugs in the Rust compiler. As the goal of Rust is to forbid memory unsafety in safe code, the Rust developers accept the burden of working around LLVM-related UB (which sometimes is quite difficult, see e.g. this longstanding UB bug related to how LLVM translates certain numeric casts: https://github.com/rust-lang/rust/issues/10184 https://github.com/rust-lang/rust/issues/10184 ).
- deleted 9y ago[deleted]