通过子范围类型进行编译器优化

时间:2016-05-16 22:21:55

标签: swift range compiler-optimization

我正在调查Swift,我想在Swift上应用MacLennan编程语言的一些原则。

然而,我没有得到他的信息保存原则"表明用户应该能够表示编译器需要的信息。作为示例,提到了子范围类型,这将使​​得更容易优化"。编译器如何根据子范围类型(​​即Swift中的范围)进行一些优化?这种优化是否适用于Swift?

我试图想出一些代码示例(非常糟糕)但是,我想知道这个范围信息是否真的可以被编译器用来做一些优化,或者它是否只是一个较短的方式做同样的事。

var arr = ["a", "b", "c", "d"]
arr[1...3] = ["a", "a", "a"]
// Instead of
var arr2 = ["a", "b", "c", "d"]
arr2[1] = "a"
arr2[2] = "a"
arr2[3] = "a"

1 个答案:

答案 0 :(得分:1)

单独设置数组值并通过范围进行操作是两种不同的操作。通过范围更改数组值可能会更改其大小,通过索引设置值会使数组大小保持不变。 e.g

var a = [1,2,3,4]
a[1...2] = [6,7,8] 
print(a) // result in [1, 6, 7, 8, 4]

这表明使用范围的下标操作只是根据需要扩展数组的新数组的值替换范围位置,这与通过索引设置数组值有所不同。