Googles Go-sprog får typeparametre
Sproget Go følger nu efter de fleste andre moderne programmeringssprog og får typeparametre, også kaldet ‘generics.’
Det skriver to af sprogets udviklere, Ian Lance Taylor og Robert Griesemer, der begge er ansat i Google. Sproget blev i sin tid udviklet for at løse de udfordringer, der er med server-programmering i stor skala hos Google.
Udviklerne meddeler, at faciliteten forventes at blive tilføjet i version 1.18, som skulle udkomme i starten af 2022.
Typeparametre gør det muligt at skrive kode, hvor funktioner benytter samme operationer for parametre og variable af forskellige typer, og kan på denne måde generalisere en algoritme.
Det benyttes ofte i forbindelse med samlinger, hvor eksempelvis en liste-struktur kan udrustes med en elementtype, så metoder som tilføj(e)
kun kan udføres med elementer af den specificerede type som parameter.
Forslaget har været en del år undervejs og et tidligere udkast, som byggede på kontrakter, er forkastet til fordel for en anden model.
Et trivielt eksempel kan se sådan ud, ifølge det vedtagede forslag:
// Print prints the elements of a slice. // It should be possible to call this with any slice value. func Print(s []T) { // Just an example, not the suggested syntax. for _, v := range s { fmt.Println(v) } }
I eksemplet her er []T
et slice med elementtypen T
.
Typeparametre er magen til almindelige funktionsparametre, og de anføres sammen med andre parametre.
Typeparametrene kan udstyres med ‘constraints’, som begrænser udvalget af typer, der kan anvendes som parametre. En constraint er blot et almindeligt interface, som Stringer
herunder:
// Stringify calls the String method on each element of s, // and returns the results. func Stringify[T Stringer](s []T) (ret []string) { for _, v := range s { ret = append(ret, v.String()) } return ret }
Ingen ko- eller kontravarians
Sprogudviklerne har fravalgt muligheden for at angive kovarians og kontravarians for funktionsparametre, en facilitet der findes i sprog som Java og C#, og som gør det muligt at specificere, hvornår en subtype eller en supertype også accepteres som parameter givet ved et typeudtryk. Udeladelsen gør generics simplere, skrives der i forslaget.
I modsætning til Java benyttes der ikke ‘type erasure’, og det betyder, at en typeparameter i Go er kendt og kan anvendes i koden under afviklingen.
Sammenlignet med C++ nævner sprogudviklerne, at dette sprogs template-implementering af typeparametre ikke benytter constraints, hvilket kan føre til fejlmeddelelser, som kan være svære at forstå for programmøren.
I sammenligning med Rust nævnes det, at Gos nye implementering er magen til Rust, dog med visse forskelle, såsom at en trait i Rust, der benyttes som constraint, skal knyttes specifikt til en type.
Der er mere information om Gos typeparametre i udkastet. Af kodeeksemplerne heri fremgår det, at den endelige syntaks endnu ikke er fastlagt.

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.