3 ms·
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?
by ajuc 9mo 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?
- esrauch 9mo agoYes, 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.
- mananaysiempre 9mo agoNot 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 https://port70.net/~nsz/c/c11/n1570.html#7.2
- esrauch 9mo agoYeah, I meant it's common for projects to make their own 'assume' macros. In Rust you can wrap core::hint::assert_unchecked similarly.