2016-05-16 68 views
0

我正在研究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

單獨設置數組值並通過範圍進行操作是兩種不同的操作。而通過範圍更改數組值可能會改變它的大小,通過索引設置值會保持數組大小不變。 e.g

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

這表明使用下標操作範圍僅通過在需要擴大陣列新數組的值替換範圍的位置,什麼是從通過索引設定數組的值不同。

+0

謝謝,這只是一些非常糟糕的代碼示例,我想出了。你知道在某些情況下,Swift編譯器是否能夠做一些優化,例如,範圍被使用?他們的意思是「讓優化更容易」? – HyperZ