Выбор ответа Senior Дженерики обновлено

Как компилируются дженерики Go

Вопрос

Как Go реализует дженерики при компиляции?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Одна копия кода на «форму» типов плюс скрытый словарь типов. Go выбрал компромисс между размером бинарника и скоростью.

Варианты ответа

  1. Полная мономорфизация: копия функции на каждый тип, как в C++
  2. Стирание типов: всё превращается в interface{}, как в Java
  3. Одна копия кода на «форму» типов плюс скрытый словарь типовправильный ответ
  4. JIT-компилятор генерирует специализированный код в рантайме

Разбор

Go выбрал компромисс между размером бинарника и скоростью. Типы с одинаковым базовым представлением в памяти (одна форма) делят одну копию кода, а различия передаются скрытым параметром-словарём. Все указательные типы имеют одну форму, поэтому вызовы методов у T-указателей идут через словарь и могут быть медленнее специализированного кода. Это не полная мономорфизация и не стирание типов, а JIT в Go отсутствует.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.