Comment by ajuc
3 days ago
So the compiler could have debug mode where it checks the invariants and release mode where it assumes they are true and optimizes around that without checking?
3 days ago
So the compiler could have debug mode where it checks the invariants and release mode where it assumes they are true and optimizes around that without checking?
Yes, and that same pattern already does exist in C and C++. Asserts that are checked in debug builds but presumed true for optimization in release builds.
Not unless you write your own assert macro using C23 unreachable(), GNU C __builtin_unreachable(), MSVC __assume(0), or the like. The standard one is defined[1] to either explicitly check or completely ignore its argument.
[1] https://port70.net/~nsz/c/c11/n1570.html#7.2
Yeah, I meant it's common for projects to make their own 'assume' macros.
In Rust you can wrap core::hint::assert_unchecked similarly.