Недавний разговор Дейва Германа в Русте сказали, что они заимствовали это свойство из C ++. Я не мог найти ничего вокруг темы. Может кто-нибудь объяснить, что означает мономорфизация?
Мономорфизация означает создание специализированных версий обобщенных функций. Если я напишу функцию, которая извлекает первый элемент любой пары:
fn first<A, B>(pair: (A, B)) -> A {
let (a, b) = pair;
return a;
}
и затем я вызываю эту функцию дважды:
first((1, 2));
first(("a", "b"));
Компилятор сгенерирует две версии first()
один специализируется на пары целых чисел, а другой — на пары строк.
Название происходит от термина языка полиморфизма, означающего одну функцию, которая может работать со многими типами данных. Мономорфизация — это преобразование из полиморфного в мономорфный код.
Не уверен насчет этого; не могли бы вы дать ссылку на разговор? Это могло быть постороннее замечание.
Герман, возможно, придумал термин для чего-то вроде специализации шаблона, который генерирует типы / объекты, которые взаимно не связаны (неполиморфный или «мономорфный») из шаблона, который является полиморфной структурой.
Не уверен, что кто-то все еще смотрит на это, но документация о ржавчине на самом деле упоминает, как это не приводит к снижению затрат через этот процесс:
https://doc.rust-lang.org/book/2018-edition/ch10-01-syntax.html