Rust引用(通常)Voldemort类型?

时间:2016-10-23 13:39:49

标签: reference rust language-lawyer

Voldemort – he who must not be named – types是其名称无法在源代码中写下的类型。在Rust中,闭包有这样的类型,因为编译器generates a new internal type for each closure。接受闭包作为函数参数的唯一方法是接受一个泛型类型(通常称为F),它被限制为Fn()(或类似)特征。

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

那么:Rust引用了Voldemort类型吗?或者我是否误解了“Voldemort类型”或Rust引用这个术语?

2 个答案:

答案 0 :(得分:5)

作为在该地区没有任何特别强烈知识的人:

我认为答案很可能是:技术上是肯定的,但它过度还原。有点像说“所有类型都是整数数组”;我的意思是,,但你这样做会失去一些有用的语义歧视。

Voldemort类型通常来隐藏用户的实现类型,因为它只应该是临时的,或者除了函数描述的接口之外你不应该使用任何东西。引用在技术上完全不可命名,但它并不像实际上限制你一样。我的意思是,即使你可以命名特定的生命周期,我也不认为你可以用它做任何有意义的事情(除了可能在函数中稍微更严格的生命周期检查)

答案 1 :(得分:0)

可以说不是。所有语言中的引用和指针类型是否都视为Voldemort类型?他们隐藏了某物,但没有。

我们将生命周期设想为被调用函数之外的代码区域。而且,它们的创建大致类似于rustc。但是,我认为函数签名是我们实际看到的生存期的类型定义。 rustc只是满足他们。除了您在函数定义中看到的内容外,命名的生存期也无所不包。