我正在玩 lambda 演算,并希望有更多的堆栈空间来构建和计算(非常)长的函数链。有没有办法为 crate 增加它,类似于增加递归限制(#![recursion_limit = "100"]
)?
crate 是一个库,我希望它能够执行堆栈密集型操作,而不管目标操作系统如何。
我正在玩 lambda 演算,并希望有更多的堆栈空间来构建和计算(非常)长的函数链。有没有办法为 crate 增加它,类似于增加递归限制(#![recursion_limit = "100"]
)?
crate 是一个库,我希望它能够执行堆栈密集型操作,而不管目标操作系统如何。
经过一些研究,我得出结论,没有一种通用的方法可以实现我所追求的目标,但是使用std::thread::Builder
我能够创建一个具有指定堆栈大小的额外线程并在其中执行堆栈繁重的操作:
fn huge_reduction() {
let builder = thread::Builder::new()
.name("reductor".into())
.stack_size(32 * 1024 * 1024); // 32MB of stack space
let handler = builder.spawn(|| {
// stack-intensive operations
}).unwrap();
handler.join().unwrap();
}
这不是语言功能,而是操作系统功能。在 *nix 系统上,您将使用类似ulimit
. 其他系统可能使用其他工具: