跳转到内容

Range

Range 描述整数序列,是可重复 sequence 值。它们常用于循环;当编译器能证明 i64 边界时,可以使用专门的字节码。

start..end 不包含结束值。start..=end 包含结束值。

fn sum_to(limit: i64) -> i64 {
let total = 0
for value in 0..=limit {
total += value
}
return total
}

Range 是可重复的,每次 for 都会创建新的遍历。需要 index 和 value 时可以使用带索引的循环。

fn weighted(limit: i64) -> i64 {
let total = 0
for index, value in 1..limit {
total += index * value
}
return total
}

Range 支持 len()is_empty() 等标准方法,前提是边界让这些操作有明确意义。

VM 可以把已证明的整数 range loop 降低为 typed scalar bytecode。这个优化必须保持相同可观察行为,不改变语言模型。