Rust 中“fuse”背后的词源或软件原理是啥?
Posted
技术标签:
【中文标题】Rust 中“fuse”背后的词源或软件原理是啥?【英文标题】:What is the etymology or software principle behind "fuse" in Rust?Rust 中“fuse”背后的词源或软件原理是什么? 【发布时间】:2022-01-17 04:35:39 【问题描述】:我在 Rust 生态系统中遇到了 fuse
这个词:
slog::Fuse
将错误升级为恐慌。
FutureExt::Fuse
"Fuse a future 使得 poll 一旦完成就不会再被调用。"
我知道 Linux 的 FUSE,一个用户空间文件系统。保险丝也是一种电气元件,当过多电流通过保险丝时会进入开路状态。在硬件中,“熔断”描述了通过(历史上)通过硅的特定导线中的过电流将硅中的电路熔断来将配置烘焙到硅中。
“熔断”在 Rust 中通常是什么意思,它的词源是什么?
【问题讨论】:
第一个可能类似于电气感应 - 错误就像过流情况,“保险丝”会导致这种情况永久禁用设备(程序恐慌)。我对期货的了解还不够,无法猜测第二个。请注意,还有 fuse 的动词含义:将两个事物连接在一起,如通过融化。 是的。忘记了join的意思。我在整个 Rust 的许多地方都看到它,但文档似乎总是暗示我已经知道“熔断”在 Rust 上下文中的含义。FutureExt::Fuse
来自Iterator::fuse()
,又是来自电气的意思。
【参考方案1】:
我能在 Rust 生态系统中找到“熔断器”的最早用途是 Iterator::fuse
,在 1.0 之前的日子里是 was added to the standard library。 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.
返回的迭代器上还有一个函数已被删除:
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
这表明Fuse
类似于a resettable electric fuse。该名称与 FUSE 文件系统完全无关。
FutureExt::Fuse
基本上是 Future
等价于 Iterator::Fuse
。 Rust 中对 Future
s 的支持远在对 Iterator
s 的支持之后。
这里的共同点是fuse
函数采用“产生事物并且可以停止的事物”,并使其停止后不再产生事物。 p>
slog::Fuse
不是“保险丝”一词的典型用法:该用法可能是指炸弹的保险丝,它很容易被点燃(它会使错误很容易点燃/恐慌程序)。你可以有点把它适应我之前的定义,如果你认为它是“一件事会产生一连串的成功/失败,而fuse
会失败并使它不会失败后产生更多的东西”。 The commit that added it 没有提供任何关于含义的提示。
【讨论】:
以上是关于Rust 中“fuse”背后的词源或软件原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Haskell 中的 Applicative 中 <*> 的词源是啥?