Wie Go Generics mit GC-Shape-Stenciling umsetzt
GC shape stenciling in Go generics

Go implementiert Generics weder durch vollständige Monomorphisierung wie Rust noch durch Type Erasure wie Java, sondern durch GC-Shape-Stenciling. Dabei erzeugt der Compiler für jede GC-Form – Größe, Ausrichtung und Pointer-Layout eines Typs – eine eigene Funktion. Typen mit gleicher Form teilen sich den Code, was Binärgröße und Kompilierzeit reduziert. Der Artikel zeigt anhand von Beispielen in Rust, Java und Go die Unterschiede und erklärt, wie Go mit Dictionaries die fehlenden Typinformationen zur Laufzeit nachliefert.
Die vier Aufrufe oben benötigen nur drei Funktionskörper: einen für int, einen für float64 und einen gemeinsamen für die beiden Pointer-Typen.