Что такое devirtualization?

Senior
131 просмотров
AFK Offer AI

Devirtualization — когда компилятор заменяет вызов через интерфейс на прямой вызов конкретного типа. Если компилятор может доказать что за интерфейсом всегда один тип — убирает косвенный вызов. Это ускоряет и открывает инлайнинг. В Go пока ограниченная поддержка, но с каждой версией улучшается.

Следующий вопрос

Что выведет: type T struct{}; func (T) M() { fmt.Println("T") }; type S struct { T }; func (S) M() { fmt.Println("S") }; var i interface{ M() } = S{}; i.M()?