Выбор ответа Senior Дженерики обновлено
Как компилируются дженерики Go
Вопрос
Как Go реализует дженерики при компиляции?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Одна копия кода на «форму» типов плюс скрытый словарь типов. Go выбрал компромисс между размером бинарника и скоростью.
Варианты ответа
- Полная мономорфизация: копия функции на каждый тип, как в C++
- Стирание типов: всё превращается в interface{}, как в Java
- Одна копия кода на «форму» типов плюс скрытый словарь типовправильный ответ
- JIT-компилятор генерирует специализированный код в рантайме
Разбор
Go выбрал компромисс между размером бинарника и скоростью. Типы с одинаковым базовым представлением в памяти (одна форма) делят одну копию кода, а различия передаются скрытым параметром-словарём. Все указательные типы имеют одну форму, поэтому вызовы методов у T-указателей идут через словарь и могут быть медленнее специализированного кода. Это не полная мономорфизация и не стирание типов, а JIT в Go отсутствует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.