¿Por qué los tipos asociados para protocolos no usan la sintaxis de tipo genérico en Swift?

Estoy confundido acerca de la diferencia entre la sintaxis utilizada para los tipos asociados para protocolos, por un lado, y los tipos genéricos por el otro.

En Swift, por ejemplo, uno puede definir un tipo genérico usando algo como

struct Stack<T> {
    var items = [T]()
    mutating func push(item: T) {
        items.append(item)
    }
    mutating func pop() -> T {
        return items.removeLast()
    }
}

mientras uno define un protocolo con tipos asociados usando algo como

protocol Container {
    typealias T
    mutating func append(item: T)
    var count: Int { get }
    subscript(i: Int) -> T { get }
}

¿Por qué no es esto último solo:

protocol Container<T> {
    mutating func append(item: T)
    var count: Int { get }
    subscript(i: Int) -> T { get }
}

¿Hay alguna razón profunda (o quizás obvia y perdida para mí) de que el lenguaje no haya adoptado la última sintaxis?

Respuestas a la pregunta(2)

Su respuesta a la pregunta