Rust引用(通常)是Voldemort类型吗?

11

伏地魔 – 那不可称呼之名的人 – 类型是无法在源代码中写出名称的类型。在Rust中,闭包具有这样的类型,因为编译器为每个闭包生成一个新的内部类型。接受闭包作为函数参数的唯一方法是接受一个泛型类型(通常称为F),该类型被限制为Fn()(或类似)特性。

Rust中的引用始终包含生命周期参数,即使通常可以省略此生命周期。生命周期无法明确命名,因为它们代表某种复杂的编译器内部范围。与生命周期交互的唯一方法是使用泛型参数(通常称为'a),它代表任何生命周期(可能受到另一个生命周期的限制)。当然,还有'static,它可以被命名,但这是一种特殊情况,不会与我的论点相冲突。

那么:Rust引用是否为伏地魔类型?或者我是否误解了“伏地魔类型”或Rust引用的术语?

2个回答

7
作为一个对该领域没有特别强的了解的人,我认为答案可能是:技术上是可以的,但这样做过于简化。有点像说“所有类型都是整数数组”;我的意思是,是的,但这样做会丧失一些有用的语义区分。
伏地魔类型通常用于隐藏实现类型,因为它只应该是临时的,或者你不应该使用除函数描述的接口之外的任何东西。引用在其整体上从技术上来说是无法命名的,但它并不真正限制你。我的意思是,即使你能够命名特定的生命周期,我认为你也不能对它做任何有意义的事情(除了在函数内进行略微严格的生命周期检查)。

1

可以说不是。所有语言中的引用和指针类型是否被视为伏地魔类型?它们隐藏了一些东西,但并不是。

我们将生命周期设想为被调函数之外的代码区域。此外,在rustc中它们大致是这样创建的。然而,我认为函数签名是我们实际看到的生命周期的类型定义。而rustc只是在满足这些定义。命名的生命周期没有比函数定义中所见更多的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接