-
Notifications
You must be signed in to change notification settings - Fork 0
rust constfn
hiromi-mi edited this page Oct 7, 2020
·
1 revision
- Q. 意味はあるの?
- A. 意味はない
以下は 2020.9 現在 nightly でしか動作しない
Sized 以外の trait 制約はあれ
// SPDX-License-Identifier: CC0-1.0
#![feature(const_trait_bound_opt_out)] // https://github.com/rust-lang/rust/issues/67794
#![allow(incomplete_features)]
#![feature(associated_type_bounds)]
#![feature(const_trait_impl)]
#![feature(const_fn)]
#![feature(const_eval_limit)]
// recursion_limit は const fn でも普通の関数でも共通
#![recursion_limit="100000000000000"]
// const_eval_limit : interpreter step limit
//https://github.com/rust-lang/rust/blob/96bb8b31c81dc2394317f2f083c3acf8087efea1/src/doc/unstable-book/src/language-features/const-eval-limit.md
#![const_eval_limit="100000000000000"]
const fn hoge(n: i64) -> i64 {
if n == 0 {
return 0;
}
if n % 2 == 0 {
return hoge(n-1)+n
}
hoge(n-1)-n
}
fn main() {
// 1000万回再帰してフリーズ
// 100万回再帰して30秒くらい
// 30万回再帰して7.5秒くらい
// 10万回再帰して3.6秒くらい
// 1万回再帰して 0.9秒くらい
const CNT:i64 = 100_100;
const X:i64 = hoge(CNT);
println!("count: {}", CNT);
println!("completed: {}",X);
}