原文作者:Erica Sadun
原文鏈接:http://ericasadun.com
時(shí)間:2016年7月15日
譯者:與狼同行
Swift3已經(jīng)是一個(gè)十分引入矚目的產(chǎn)品,它匯聚了許多來自Swift開源社區(qū)的人們所給予的靈感,想法還有辛勤的勞動(dòng)。
可是現(xiàn)在,我想談一談Swift3發(fā)布的終局:
這里我來舉幾個(gè)關(guān)鍵的點(diǎn):
- Swift3最后采取根本變化的日子是7月27日。
那一天,很有可能會(huì)出現(xiàn)對(duì)于Swift3的修改批準(zhǔn)但是沒有實(shí)現(xiàn)的建議。其中包含一些重大的改變。于是,我們會(huì)有一次開放的討論,來商議那些議案的在Swift3和未來版本的Swift中的命運(yùn)。 - 8月1日我們將開始展開Swift4的討論。這部分的討論將可能會(huì)引向一個(gè)很重要的事情,那就是在Swift3中所推遲,而作為Swift4的一個(gè)大目標(biāo) -- ABI穩(wěn)定。直到那之前,討論應(yīng)該仍然會(huì)集中關(guān)于Swift3.
- 值得注意的是,在最后決定Swift3采取重大更新和開始討論Swift4之間我們會(huì)刻意的留出幾天。這個(gè)想法是提供幾天的時(shí)間來讓社區(qū)總結(jié)一下我們?cè)赟wift3中哪些事情已經(jīng)結(jié)束了。
- 關(guān)于Swift3開發(fā)的最后分支計(jì)劃已被決定,但是很有可能會(huì)被主線所影響。其中的一部分會(huì)在6月27日討論如何去處理哪些在Swift3中剩余的還沒被實(shí)現(xiàn)的議案。
- Swift3最后的發(fā)布日期仍然待定。但是會(huì)在7月27日后,Swift3將會(huì)基本結(jié)束,而不會(huì)再積極更新。
- 隨著最近幾周的思考,我要呼吁幾個(gè)同意但沒有實(shí)現(xiàn)的議案,來引起注意。這些議案在目前蘋果的Swift團(tuán)隊(duì)未來幾周的時(shí)間中還無(wú)人解決。
譯者注:一個(gè)未應(yīng)用狀態(tài)的函數(shù)實(shí)例(unapplied method )是指諸如下面例子中的Type.instanceMethod,
產(chǎn)生一種諸如(Self) -> (Args...) -> Ret:的函數(shù)類型
struct Type {
var x: Int
func instanceMethod(y y: Int) -> Int {
return x + y
}
}
let f = Type.instanceMethod // f : (Type) -> (y: Int) -> Int
f(Type(x: 1))(y: 2)
為了將未應(yīng)用狀態(tài)的函數(shù)實(shí)例更有用和持久來符合Swift語(yǔ)義,并且對(duì)于mutating方法更有效率,
我們應(yīng)該將其變?yōu)橐环N更平坦的函數(shù)類型(Self, Args...) -> Ret:
let f = Type.instanceMethod // f: (Type, y: Int) -> Int
f(Type(x: 1), y: 2) // ==> 3
SE-0068:對(duì)于值類型和類一級(jí)成員,將dynamicType更名為Self
SE-0075: 添加一個(gè)生成配置導(dǎo)入測(cè)試
譯者介紹:形如此類:
#if canImport(UIKit)
// UIKit-based code
#elseif canImport(Cocoa)
// OSX code
#elseif
// Workaround/text, whatever
#endif
#if !os(Linux)
// Matches OSX, iOS, watchOS, tvOS, Windows, FreeBSD
#endif
SE-0096: 將dynamicType從一個(gè)屬性轉(zhuǎn)變?yōu)椴僮鞣?/a>
譯者介紹:
在swift中,dynamicType是一個(gè)屬性。也因?yàn)檫@樣,對(duì)于任何值不管他有沒有用,你都可以寫
這樣的代碼:比如說: 4.dynamicType和myFunction().dynamicType。
與大多數(shù)屬性不同的是,它并不表示特定類型的邏輯特性。
由于dynamicType表現(xiàn)的更像一個(gè)操作符就像sizeof。希望能修改語(yǔ)法。
譯者介紹:希望用操作符的排序來取代數(shù)字優(yōu)先級(jí)
// 之前的語(yǔ)法
infix operator <> { precedence 100 associativity left }
// 改進(jìn)后的語(yǔ)法
precedencegroup ComparativePrecedence {
associativity: left
strongerThan: LogicalAndPrecedence
}
infix operator <> : ComparativePrecedence
SE-0092: 在協(xié)議和協(xié)議擴(kuò)展中的Typealiases
SE-0110: 區(qū)分單元組函數(shù)類型和多參數(shù)函數(shù)類型
譯者介紹:如今,我們我們可以這樣寫代碼:
let fn1 : (Int, Int) -> Void = { x in
// The type of x is the tuple (Int, Int).
// ...
}
let fn2 : (Int, Int) -> Void = { x, y in
// The type of x is Int, the type of y is Int.
// ...
}
一個(gè)存在n個(gè)參數(shù)的函數(shù)變量可以被放入n個(gè)參數(shù),也可以放入一個(gè)含n個(gè)參數(shù)的元組。
這違背了"最小詫異原則"(least surprise)和弱化了類型安全,應(yīng)該被修改。
議案者提議:(1)fn2表達(dá)式應(yīng)該可行,fn1應(yīng)該不可行
(2)一個(gè)含n個(gè)參數(shù)的元組的函數(shù)類型應(yīng)該套雙層括號(hào):
let a : ((Int, Int, Int)) -> Int = { x in return x.0 + x.1 + x.2 }
一些建議比如說SE-0075這個(gè)議案,這件事我們可以在任何時(shí)間去添加,但是許多其他的議案都目標(biāo)于提升Swift3的穩(wěn)定性。我想讓這個(gè)社區(qū)的人知道這些議案當(dāng)前沒有被實(shí)現(xiàn),希望能夠有興趣幫助這些議案發(fā)生在Swift3中。
相關(guān)的是,我也特別感謝社區(qū)實(shí)現(xiàn):
SE-0095: 用P1 & P2 語(yǔ)法代替 protocol<P1,P2> 語(yǔ)法 。
除了這些語(yǔ)言的議案,還有一系列關(guān)于標(biāo)準(zhǔn)庫(kù)優(yōu)秀的工作,在Swift3中將會(huì)變得更出色,以下是一個(gè)要點(diǎn)來總結(jié)這些任務(wù)。
https://gist.github.com/gribozavr/37e811f12b27c6
最后感謝每一個(gè)人,嗯,我是指那些為Swift3付出貢獻(xiàn)的每一個(gè)人~