Ответ 1
Невозможно установить размер стека основного потока в Rust. Фактически, предположение о размере стека основного потока выполняется на уровне исходного кода в библиотеке Rust runtime (https://github.com/rust-lang/rust/blob/master/src/libstd/rt/mod.rs#L85).
Переменная окружения RUST_MIN_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());
}
clap, похоже, может правильно завершить приложение из дочернего потока, поэтому ваш код должен работать с небольшими изменениями.