Zobacz ten kod:Odpowiednik constexpr z C++?
fn main() {
let something_const = 42;
fn multiply(nbr: i32) -> i32 {
nbr * something_const
}
println!("{}", multiply(1));
}
rustc
wyjścia że
error[E0434]: can't capture dynamic environment in a fn item; use the || { ... } closure form instead
--> main.rs:19:15
|
19 | nbr * something_const
| ^^^^^^^^^^^^^^^
Ale something_const
nie jest dynamiczny, ponieważ jest znany w czasie kompilacji.
Czy jest równoważny w Rust mechanizmu C++ constexpr
?
Szkoda, że funkcje const są tak ograniczone, nawet w nocy. Zasadniczo tylko rekursja ogona. –
@AleksanderFular: Trwają prace nad bardzo zdolnym, stałym ewaluatorem o nazwie [miri] (https://github.com/solson/miri) (aka, interpreter MIR). Na razie społeczność Rusta jest zadowolona z "czekania na nią" i oglądania eksperymentów Solsona i oli-obka i zobaczenia, co jest możliwe, co nie jest, co za drogie, jakie są pułapki, itp ... zauważ, że MIRI jest znacznie bardziej zaawansowane niż C++'s constexpr: obsługuje alokację pamięci! –
@AleksanderFular: Od kiedy przejeżdżałem ... projekt [MIRI] (https://github.com/solson/miri), tłumacza MIR reprezentatywnego pośredniego poziomu średniego, używanego przez rustc, wylądował w rustc, a już 1.24 ustabilizowało garść funkcji jako "const" takich jak 'mem :: size_of'. –