Rust 如何在编译时设置线程堆栈大小?

Rust 如何在编译时设置线程堆栈大小?,rust,Rust,当尝试运行构建大型()的程序时,我得到一个堆栈溢出:线程“”已溢出其堆栈 到目前为止,我还不知道如何指示rustc增加堆栈大小,以实现暴力解决方案RUST\u MIN\u STACK似乎只适用于运行时,即使在运行时,它似乎也没有任何效果 在生成代码时,我可能需要做的是将子命令创建移动到运行时,这就是我接下来要尝试的 但是,您是否发现了一种不同的解决方法? 如果构建的结构足够大和嵌套,那么解决这个问题似乎非常重要,因为构建器模式似乎很容易出现这个问题 如何繁殖 请注意,您将需要my fork of

当尝试运行构建大型()的程序时,我得到一个堆栈溢出:
线程“”已溢出其堆栈

到目前为止,我还不知道如何指示
rustc
增加堆栈大小,以实现暴力解决方案
RUST\u MIN\u STACK
似乎只适用于运行时,即使在运行时,它似乎也没有任何效果

在生成代码时,我可能需要做的是将
子命令
创建移动到运行时,这就是我接下来要尝试的

但是,您是否发现了一种不同的解决方法?

如果构建的结构足够大和嵌套,那么解决这个问题似乎非常重要,因为构建器模式似乎很容易出现这个问题

如何繁殖 请注意,您将需要my fork of并在本地设置覆盖,以允许使用最新的编译器进行构建


无法将主螺纹的堆叠尺寸设置为生锈。事实上,关于主线程堆栈大小的假设是在Rust运行时库()的源代码级别进行的

环境变量
RUST\u MIN\u STACK
会影响程序中创建的非主线程线程的堆栈大小,但您也可以在运行时在源代码中轻松指定该值

解决问题最直接的方法可能是在创建的单独线程中运行clap,以便控制其堆栈大小

以这段代码为例:

extern crate clap;
use clap::App;
use std::thread;

fn main() {
    let child = thread::Builder::new().stack_size(32 * 1024 * 1024).spawn(move || {
        return App::new("example")
            .version("v1.0-beta")
            .args_from_usage("<INPUT> 'Sets the input file to use'")
            .get_matches();
    }).unwrap();

    let matches = child.join().unwrap();

    println!("INPUT is: {}", matches.value_of("INPUT").unwrap());
}
extern板条箱clap;
使用clap::App;
使用std::线程;
fn main(){
让child=thread::Builder::new().堆栈大小(32*1024*1024).生成(移动| |{
返回应用程序::新建(“示例”)
.版本(“v1.0-beta版”)
.args_from_用法(“'设置要使用的输入文件'”)
.get_matches();
}).unwrap();
让matches=child.join().unwrap();
println!(“输入为:{}”,匹配(“输入”).unwrap()的.value_);
}

clap似乎能够从子线程中正确终止应用程序,因此您的代码只需稍加修改即可正常工作。

我想这是操作系统特有的。感谢您指出这一点!我仍然希望能够在编译时为主线程设置这个值——也许有一天rustc会支持这个值。
➜  google-apis-rs git:(clap) rustc --version
rustc 1.1.0-nightly (97d4e76c2 2015-04-27) (built 2015-04-28)
extern crate clap;
use clap::App;
use std::thread;

fn main() {
    let child = thread::Builder::new().stack_size(32 * 1024 * 1024).spawn(move || {
        return App::new("example")
            .version("v1.0-beta")
            .args_from_usage("<INPUT> 'Sets the input file to use'")
            .get_matches();
    }).unwrap();

    let matches = child.join().unwrap();

    println!("INPUT is: {}", matches.value_of("INPUT").unwrap());
}