Какова практическая разница между общими и протокольными параметрами функций?
Дан протокол без каких-либо связанных типов:
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
используя растущий размер кода для каждого типа, но с быстрой статической диспетчеризацией?