Как увеличить размер стека, доступного для библиотеки Rust?

Я играю с лямбда-исчислением и хотел бы иметь немного больше стекового пространства, чтобы иметь возможность строить и вычислять (очень) длинные цепочки функций. Есть ли способ увеличить его для ящика, аналогично увеличению предела рекурсии (#![recursion_limit = "100"])?

Ящик - это библиотека, и я хотел бы, чтобы она могла выполнять операции с интенсивным стеком независимо от целевой операционной системы.

2 ответа

Решение

После некоторых исследований я пришел к выводу, что не существует универсального способа добиться того, чего я добиваюсь, но используя 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, Другие системы, вероятно, используют другие инструменты:

Другие вопросы по тегам