Учитывая протокол без каких-либо связанных типов:
protocol SomeProtocol
{
var someProperty: Int { get }
}
В чем разница между этими двумя функциями на практике (а это означает, что "один не является общим, а другой - нет" )? Они генерируют разные коды, имеют ли они разные характеристики времени выполнения? Различаются ли эти различия, когда протокол или функции становятся нетривиальными? (поскольку компилятор мог, вероятно, встраивать что-то вроде этого)
func generic<T: SomeProtocol>(some: T) -> Int
{
return some.someProperty
}
func nonGeneric(some: SomeProtocol) -> Int
{
return some.someProperty
}
Я в основном спрашиваю о различиях в том, что делает компилятор, я понимаю последствия языкового уровня обоих. В принципе, nonGeneric
подразумевает постоянный размер кода, но более медленную динамическую отправку, а не generic
, используя растущий размер кода для каждого переданного типа, но с быстрой статической отправкой?