Dave Hermans jüngster Vortrag in Rust sagte, dass sie diese Eigenschaft von C ++ ausgeliehen haben. Ich konnte nichts rund um das Thema finden. Kann jemand bitte erklären, was Monomorphisierung bedeutet?
78
Dave Hermans jüngster Vortrag in Rust sagte, dass sie diese Eigenschaft von C ++ ausgeliehen haben. Ich konnte nichts rund um das Thema finden. Kann jemand bitte erklären, was Monomorphisierung bedeutet?
Monomorphisierung bedeutet, spezielle Versionen generischer Funktionen zu generieren. Wenn ich eine Funktion schreibe, die das erste Element eines Paares extrahiert:
fn first<A, B>(pair: (A, B)) -> A {
let (a, b) = pair;
return a;
}
und dann rufe ich diese Funktion zweimal auf:
first((1, 2));
first(("a", "b"));
Der Compiler generiert zwei Versionen von first()
, eine für Paare von Ganzzahlen und eine für Paare von Zeichenfolgen.
Der Name leitet sich vom Programmiersprachenbegriff "Polymorphismus" ab - was eine Funktion bedeutet, die mit vielen Arten von Daten umgehen kann. Monomorphisierung ist die Umwandlung von polymorphem in monomorphen Code.
Ich bin mir nicht sicher, ob sich noch jemand damit befasst, aber in der Rust-Dokumentation wird tatsächlich erwähnt, wie durch diesen Prozess keine Kostenabstraktion erzielt wird. Aus der Leistung von Code unter Verwendung von Generika :
quelle
Ich bin mir nicht sicher. Könntest du auf das Gespräch verlinken? Es könnte eine beiläufige Bemerkung gewesen sein.
Herman könnte einen Begriff für so etwas wie eine Vorlagenspezialisierung geprägt haben, die aus der Vorlage, die eine polymorphe Struktur darstellt, Typen / Objekte erzeugt, die nicht miteinander zusammenhängen (nicht polymorph oder "monomorph").
quelle
Es gibt eine schöne Erklärung der Monomorphisierung im Rostbuch
Wenn Sie im Buchbeispiel Variablen definiert haben mit
Some
:quelle