Swift编译器对'for'循环的优化

西蒙·尤恩斯

我有一个类似于这样的“ for”循环:

for i in 0...n - 1 {
    // do stuff, n is not changed
}

回想当年,当我使用FORTRAN进行编码时,我被告知这是一种编码大型“ for”循环的效率很低的方法。

Swift编译器是否可以识别不变的限制并预先计算n-1?

清扫器

我认为答案是肯定的。

1...n - 1代表一个Range对象。它是的字面值Range因此,当编译到达循环并看到文字时,它会认为

好像您想创建一个新Range<Int>对象!干得好!嗯...所以我猜iInt...

等等。

这意味着n - 1在创建对象时会对进行评估。并保持这种状态,不再进行第二次评估。这段代码通过不打个招呼来证明这一点:

var n = 10
for i in 1...n - 1 {
    n = 2
    print("Hello")
}

是的。

笔记:

  • 最好使用1..<n而不是1...n - 1在这种情况下,它们是相同的。
  • 苹果实际上建议您使用这种方法,而不是使用C样式的for循环。
  • Swift 3中将删除C样式的for循环

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift编译器对'for'循环的优化

来自分类Dev

编译器所谓的while循环优化

来自分类Dev

C编译器通过运行循环来优化循环

来自分类Dev

循环性能差异和编译器优化

来自分类Dev

编译器优化在循环期间保持静态的属性

来自分类Dev

编译器优化忽略循环中无效的函数调用

来自分类Dev

编译器在这里执行哪个循环优化?

来自分类Dev

编译器可以优化可变长度的循环吗?

来自分类Dev

Linux上的Swift:如何指定编译器优化

来自分类Dev

编译器优化问题

来自分类Dev

编译器的优化指标

来自分类Dev

Swift编译器“修复”错误循环-可选

来自分类Dev

现代编译器是否优化for循环中的unsigned int使用?

来自分类Dev

Java和C ++中for循环的边界检查的编译器/ JIT优化

来自分类Dev

编译器优化是否可以消除在for循环的条件中反复调用的函数?

来自分类Dev

难道Java编译器优化创建循环的局部变量?

来自分类Dev

对在循环中用作“ const&”函数参数的临时对象的编译器优化?

来自分类Dev

nvcc编译器未优化

来自分类Dev

编译器是否优化String文字?

来自分类Dev

编译器优化回调与JMP

来自分类Dev

了解MSVS C ++编译器优化

来自分类Dev

C#编译器优化

来自分类Dev

禁用GLSL编译器优化

来自分类Dev

R中的字节编译器优化

来自分类Dev

编译器优化或我的误解

来自分类Dev

编译器代码优化:AST与IR

来自分类Dev

阻止编译器优化逻辑

来自分类Dev

GCC编译器优化选项

来自分类Dev

禁用特定的编译器优化