< 返回我的博客

爱国的张浩予 发表于 2021-04-01 12:35

Tags:loop,while,basic-syntax

从编译时的性能优化来讲

两种循环结构没有差别。它们被翻译为相同的“中间字节码”交给后端编译器LLVM

就前端编译器的词法分析能力而言

loop能够提升rustc的语义推断能力,从而更智慧地处理下面两类代码结构:

  • 循环前,声明变量(未初始化);循环中,初始化变量;循环后,使用变量

    let x;
    loop { // 此处若是 while true,rustc 直接报错。
        x = 1;
        break;
    }
    println!("{}", x);
    
  • 配合break表达式; 语句,loop {... break expr; ...}立即变身赋值表达式的子表达式给变量赋值。

    let x = 1;
    let y = loop { // 传递给 break 的值被赋给了变量 y
        x += 1;
        if x == 3 {
            break x * 2;
        }
    };
    

上面这两项 while true 循环结构都做不到。

评论区

写评论

还没有评论

1 共 0 条评论, 1 页