Меня смущает различие между синтаксисом, используемым для связанных типов протоколов, с одной стороны, и универсальными типами с другой.
Например, в Swift можно определить универсальный тип, используя что-то вроде
struct Stack<T> {
var items = [T]()
mutating func push(item: T) {
items.append(item)
}
mutating func pop() -> T {
return items.removeLast()
}
}
в то время как один определяет протокол со связанными типами, используя что-то вроде
protocol Container {
typealias T
mutating func append(item: T)
var count: Int { get }
subscript(i: Int) -> T { get }
}
Почему последний не просто:
protocol Container<T> {
mutating func append(item: T)
var count: Int { get }
subscript(i: Int) -> T { get }
}
Есть ли какая-то глубокая (или, возможно, просто очевидная и утерянная для меня) причина, по которой язык не принял последний синтаксис?