gpt4 book ai didi

rust - 为什么 std::thread::spawn() 会在出错时 panic 而不是返回结果?

转载 作者:行者123 更新时间:2023-11-29 08:10:50 25 4
gpt4 key购买 nike

在 Rust 的标准库中,有两种生成线程的方法:

它们之间的区别在于,当操作系统创建线程失败时,前者会崩溃,而后者会返回 Result。 .

为什么 std::thread::spawn() 不简单地返回一个 Result 而不是 panic ?从我的角度来看,这会更安全。此外,它将统一两个函数的返回类型。在这种特殊情况下,“默认 panic ”背后的动机是什么?

最佳答案

免责声明:如前所述,确切的推理可能很难理解;然而,我们可以看看事实。

From my point of view, this would be safer.

不会。

panic 不会引入内存或线程不安全,也不是可以忽略的错误信号方法。

绝对安全。

Also, it would unify the return type of both functions.

会的。这将是喜忧参半。

引用爱默生的话:

A foolish consistency is the hobgoblin of little minds

请记住,在 Rust 中,Result 不能被忽略,它必须被确认和处理。这在某种程度上降低了捷径的值(value)。比较:

let h = Builder::new().spawn(f).unwrap();

let h = spawn(f).unwrap();

let h = spawn(f);

后者更像是一条捷径!

What is the motivation behind "panicking by default" in this particular case?

方便

线程 API 是围绕两个互补的 API 构建的:

  • Builder API 以冗长为代价提供对每个方面的细粒度控制,
  • 免费函数 API 提供了一种以控制为代价快速生成线程的简洁方法。

这样,无论您想要控制还是简洁,都有适合您的标准 API。

不这样做的代价是许多人会在默认情况下引入unwrap 函数。每一个他们自己的。而且跳项目会更难。

关于rust - 为什么 std::thread::spawn() 会在出错时 panic 而不是返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45019559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com