首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rust编译器使用什么算法来推断生命周期变量?

Rust编译器使用什么算法来推断生命周期变量?
EN

Stack Overflow用户
提问于 2017-04-21 21:01:06
回答 1查看 905关注 0票数 4
代码语言:javascript
复制
fn foo<'a>(x: &'a i32, y: &'a i32) {}

fn main() { 
    let a = 123;
    {
        let b = 234;
        foo(&a, &b);
    }
}

在上面的代码中,&a&b应该是具有不同生存期的引用。

编译器如何推断foo的生命周期变量'a?据我所知,它没有使用标准的Hindley-Milner统一算法。生存期必须是两个生存期的内部作用域或某个交集。

生命周期推断是与标准类型推断完全不同的过程吗?

编译器是使用交集类型还是使用生命周期之间的一些子类型关系来选择最受限制的生命周期?

EN

回答 1

Stack Overflow用户

发布于 2017-04-22 03:18:06

Rust使用改进的Hindley-Milner统一算法,因为它具有子类型关系。

例如,对于任何'a&'static T都是&'a T的子类型。

您的情况相对简单,当编译器看到调用foo(&a, &b)时,它只是将'a统一为两个生存期中限制最多的一个(这是交叉点,因为现在生存期是词法的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43543407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档