私はラムダ微積分で遊んでいて、(非常に)長い関数チェーンを構築して計算できるようにもう少しスタックスペースが必要です。再帰制限(#![recursion_limit = "100"]
)を増やすのと同様に、クレートのためにそれを増やす方法はありますか?Rustライブラリで使用できるスタックサイズを増やすにはどうすればよいですか?
クレートはライブラリであり、ターゲットオペレーティングシステムに関係なくスタック集中型の操作を実行できるようにしたいと考えています。
私はラムダ微積分で遊んでいて、(非常に)長い関数チェーンを構築して計算できるようにもう少しスタックスペースが必要です。再帰制限(#![recursion_limit = "100"]
)を増やすのと同様に、クレートのためにそれを増やす方法はありますか?Rustライブラリで使用できるスタックサイズを増やすにはどうすればよいですか?
クレートはライブラリであり、ターゲットオペレーティングシステムに関係なくスタック集中型の操作を実行できるようにしたいと考えています。
が、私はできた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
のようなツールを使用します。
@ljedrz:['std :: thread :: Builder'](https://doc.rust-lang.org/1.8.0/std/thread/struct.Builder.html)で指定することができますプログラム内から作成されたスレッドのスタックサイズ* main *スレッドのスタックサイズのみがOSによって設定されます。 @MatthieuM。 –
あなたは本当に256MBのようなスタックサイズを設定できますか?また、Rust 1.8のドキュメントにリンクしていますか? [current docs](https://doc.rust-lang.org/std/thread/struct.Builder.html)にリンクする方がはるかに優れています。これは* unit * 'stack_size'の内容を明確にしています。 – Shepmaster
@Shepmaster:私はリンクのためにGoogleを非難します;)最大スタックサイズに関しては、実際にはOSによって、または基本的なスレッド実装によって制限されるかもしれませんが、Rustからチューニングできます。 @MatthieuM。 –
stコンパイラがスタック上で動作するスタックの大きさ**または** [あなたの*プログラムのスタック](http://stackoverflow.com/questions/29937697/how-to-set-the-thread-stack-size-コンパイル時に)? –
@LukasKalbertodt貨物検査中に問題が発生し、オーバーフローしたスレッドは 'libname-hash.exe'だったので、結局プログラムだと思います。 – ljedrz