Rust 中“fuse”背后的词源或软件原理是什么?

Ros*_*ers 4 terminology rust

fuse我在 Rust 生态系统中遇到了这个词:

  • slog::Fuse将错误推向恐慌。

  • FutureExt::Fuse“融合一个未来,这样民意调查一旦完成就不会再被召集。”

我知道 Linux 的 FUSE,一个用户空间文件系统。保险丝也是一种电气元件,当流过保险丝的电流过大时,保险丝就会进入开路状态。在硬件中,“熔断”描述了通过(历史上)通过硅的特定导线中的过电流熔断硅中的电路来将配置烘焙到硅中。

Rust 中的“保险丝”通常意味着什么?它的词源是什么?

loo*_*ops 8

我在 Rust 生态系统中找到的“fuse”最早的用法是Iterator::fuse,它在 1.0 之前的日子里被添加到标准库中。最初的文档Iterator::fuse说:

/// Creates an iterator that yields `None` forever after the underlying
/// iterator yields `None`. Random-access iterator behavior is not
/// affected, only single and double-ended iterator behavior.
Run Code Online (Sandbox Code Playgroud)

返回的迭代器上还有一个函数已被删除:

impl<T> Fuse<T> {
    /// Resets the fuse such that the next call to .next() or .next_back() will
    /// call the underlying iterator again even if it prevously returned None.
    #[inline]
    fn reset_fuse(&mut self) {
        self.done = false
    }
}
Run Code Online (Sandbox Code Playgroud)

这表明它Fuse类似于可复位的电保险丝。该名称与 FUSE 文件系统完全无关。

FutureExt::Fuse基本上Future相当于Iterator::Fuse. Rust 中对 s的支持Future远远晚于对Iterators 的支持。

这里的共同点是,一个fuse函数接受“一个能产生东西并且可以停止的东西”,并使它在停止后不再产生东西。

slog::Fuse不是“保险丝”一词​​的典型用法:该用法可能指的是炸弹的保险丝,它很容易被点燃(它使错误很容易点燃/使程序陷入恐慌)。如果您将其视为“一个事物产生一系列成功/失败,并接受失败并使其在失败后不再产生任何东西”,那么您可以将其与我之前所做的定义相匹配。添加它的提交没有提供任何有关其含义的提示。fuse