Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yeah which may not be what you want. E.g. `assert(expensive_to_compute() == 0)`.

The correct way to solve this is with debug asserts (as in Rust, or how the parent described).



Genuine question, does Rust know if `expensive_to_compute()` has side effects? There are no params, so could it be compiled out if the return value is ignored? Ex: `expensive_to_compute()` What about: `(void) expensive_to_compute()`?


No, in general Rust doesn't (and can't) know whether an arbitrary function has side effects. The compiler does arguably have a leg up since Rust code is typically all built from source, but there's still things like FFI that act as visibility barriers for the compiler.


No, Rust is the same as C++ in terms of tracking side effects. It doesn't matter that there are no parameters. It could manipulate globals or call other functions that have side effects (e.g. printing).


What about rust const fn()? I think it guarantees there are no side effects


I think you're right. Equivalent to C++'s constexpr.


Compilers are very good these days. If it has no side effects it will likely be compiled out.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: