ржавчина — Что такое мономорфизация с контекстом для C ++?

Недавний разговор Дейва Германа в Русте сказали, что они заимствовали это свойство из C ++. Я не мог найти ничего вокруг темы. Может кто-нибудь объяснить, что означает мономорфизация?

50

Решение

Мономорфизация означает создание специализированных версий обобщенных функций. Если я напишу функцию, которая извлекает первый элемент любой пары:

fn first<A, B>(pair: (A, B)) -> A {
let (a, b) = pair;
return a;
}

и затем я вызываю эту функцию дважды:

first((1, 2));
first(("a", "b"));

Компилятор сгенерирует две версии first()один специализируется на пары целых чисел, а другой — на пары строк.

Название происходит от термина языка полиморфизма, означающего одну функцию, которая может работать со многими типами данных. Мономорфизация — это преобразование из полиморфного в мономорфный код.

88

Другие решения

Не уверен насчет этого; не могли бы вы дать ссылку на разговор? Это могло быть постороннее замечание.

Герман, возможно, придумал термин для чего-то вроде специализации шаблона, который генерирует типы / объекты, которые взаимно не связаны (неполиморфный или «мономорфный») из шаблона, который является полиморфной структурой.

5

Не уверен, что кто-то все еще смотрит на это, но документация о ржавчине на самом деле упоминает, как это не приводит к снижению затрат через этот процесс:

https://doc.rust-lang.org/book/2018-edition/ch10-01-syntax.html

1
По вопросам рекламы [email protected]