неявное инстанцирование.
А в расте есть необходимость в явном истанцировании?
Если я в двух файлах использую одну и ту же generic-функцию с одним и тем же типовым параметром, будет ли она инстанцирована (и, соответственно, скомпилирована) дважды?
Дубли убираются
На этапе линковки?
оптимизатор вроде все ненужное по его мнению убирает
Скорее всего зависит от того, где оно дублируется. В пределах крейта должно скомпилить один раз
в расте если ты напишешь 2 функции одинаковых но с разным названием в годболте увидишь что в итоге компилятор 1 ток сделает и в обоих местах будет её вызывать
А вот это уже где-то в самом конце убирается, не?
https://rust.godbolt.org/z/reb53f5T5
Ну я про этапы компиляции, да. И изначальный вопрос в том, в какой момент дубликаты дженерик типов/функций будут убраны
Этого не знаю, наверное можно проверить но кажется чутка бесполезно. Я отвечал на > Если я в двух файлах использую одну и ту же generic-функцию с одним и тем же типовым параметром, будет ли она инстанцирована (и, соответственно, скомпилирована) дважды? И ответ - нет, не будет. По крайней мере в рамках 1 транслейшн юнита
А если в двух зависимостях?
учитывая что в расте зависимости линкуются статически то думаю разницы быть не должно. НО я не проверял так что врать не буду)
Скорее всего на этапе оптимизаций LLVM https://llvm.org/docs/Passes.html#mergefunc-merge-functions
Обсуждают сегодня